Request.swift
-
internal(set) 设置set权限
<pre>
open internal(set) var delegate: TaskDelegate
</pre> -
defer
<pre>
open internal(set) var delegate: TaskDelegate {
get {
taskDelegateLock.lock() ; defer { taskDelegateLock.unlock() }
return taskDelegate
}
set {
taskDelegateLock.lock() ; defer { taskDelegateLock.unlock() }
taskDelegate = newValue
}
}
</pre>
解读
起到延时作用,在定义的当前作用域最后一步执行
注意:类中使用defer,在对象方法中,使用defer,在defer块中,调用属性之前,必须初始化所有存储属性,重要事说三遍,所有的存储属性,所有的,存储属性
- @discardableResult
<pre>
@discardableResult
open func authenticate(
user: String,
password: String,
persistence: URLCredential.Persistence = .forSession)
-> Self
{
let credential = URLCredential(user: user, password: password, persistence: persistence)
return authenticate(usingCredential: credential)
}
</pre>
解读
函数的setNewScore 方法有返回值,但是调用的时候,没有使用常量或者变量接受这个返回值,系统会产生警告如下图;通过加关键字@discardableResult去除那种警告
-
os宏
if os(OSX) || os(iOS) || os(tvOS) || os(watchOS)
解读
系统版本检测
-
@escaping
解读
我们经常在下载等异步操作完成时,才调用闭包函数,我们有可能暂时不要把这个闭包存放在数组中,或者使用属性去引用它,那么这个时候就需要使用这个关键了;
默认为:nonescape
- CustomStringConvertible
- CustomDebugStringConvertible
解读
在调试的时候总会发现在输出自定义的类与结构体时,会打印很多不想输出的变量;
https://developer.apple.com/reference/swift/customstringconvertible
- AnyHashable
<pre>
var headers: [AnyHashable: Any] = [:]
</pre>
解读
A type-erased hashable value. 类型擦除
https://developer.apple.com/reference/swift/anyhashable
- OptionSet
Response.swift
- available
<pre>
@available(iOS 10.0, macOS 10.12, tvOS 10.0, *)
extension DefaultDataResponse: Response {
if !os(watchOS)
/// The task metrics containing the request / response statistics.
public var metrics: URLSessionTaskMetrics? { return _metrics as? URLSessionTaskMetrics }
endif
}
</pre>
解读
@available 放在函数(方法),类或者协议前面。表明这些类型适用的平台和操作系统。
另外一个特性参数:星号(*),表示包含了所有平台
@available 还有其他一些参数可以使用,分别是:
<pre>
deprecated=版本号 :从指定平台某个版本开始过期该声明
obsoleted=版本号 :从指定平台某个版本开始废弃(注意弃用的区别, deprecated 是还可以继续使用,只不过是不推荐了, obsoleted 是调用就会编译错误)该声明
message=信息内容 :给出一些附加信息
unavailable :指定平台上是无效的
renamed=新名字 :重命名声明
</pre>
- available
用在条件语句代码块中,判断不同的平台下,做不同的逻辑处理,比如:
<pre>
if #available(iOS 8, *) {
// iOS 8 及其以上系统运行
}
guard #available(iOS 8, *) else {
return //iOS 8 以下系统就直接返回
}
</pre>
- AnyObject
Any 可以代表 struct、class、func 等等几乎所有类型,而 AnyObject 只能代表 class 生成的实例










网友评论