美文网首页计算机技术一锅炖iOS Developer
#读源码学Swift编程 之Alamofire 1

#读源码学Swift编程 之Alamofire 1

作者: 践行者 | 来源:发表于2016-10-18 16:41 被阅读62次

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 生成的实例

相关文章

网友评论

    本文标题:#读源码学Swift编程 之Alamofire 1

    本文链接:https://www.haomeiwen.com/subject/mjdtuttx.html