在本文中,我们将详细介绍Swift扩展「可以」添加存储属性的各个方面,并为您提供关于swift协议扩展的相关解答,同时,我们也将为您带来关于AcerSwift3笔记本怎么样AcerSwift3笔记本上
在本文中,我们将详细介绍Swift 扩展「可以」添加存储属性的各个方面,并为您提供关于swift 协议扩展的相关解答,同时,我们也将为您带来关于Acer Swift 3笔记本怎么样 Acer Swift 3笔记本上手图赏、Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望、Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数、ios – Swift 3发布后,Swift 2应用程序是否可以运行?的有用知识。
本文目录一览:- Swift 扩展「可以」添加存储属性(swift 协议扩展)
- Acer Swift 3笔记本怎么样 Acer Swift 3笔记本上手图赏
- Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望
- Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数
- ios – Swift 3发布后,Swift 2应用程序是否可以运行?
Swift 扩展「可以」添加存储属性(swift 协议扩展)
好吧,其实我标题党了:Swift 扩展只能添加计算属性。然而如果你愿意用 Objective-C 的关联对象,你可以在 Swift 中做一些同样有趣的事。有很多的模板可供选择,然而如果你用这些太过显然的方式,你也就牺牲了类型安全。我们可以做得更好吗?
当然可以。这里就是一些这样的函数,使用 Swift 类型推断的黑魔法,使你在类或协议扩展中写类型安全的非 Optional 计算属性时,就像存储属性一样。
import Foundation
func associatedObject<ValueType: AnyObject>(
base: AnyObject,
key: UnsafePointer<UInt8>,
initialiser: () -> ValueType)
-> ValueType {
if let associated = objc_getAssociatedObject(base, key)
as? ValueType { return associated }
let associated = initialiser()
objc_setAssociatedObject(base, key, associated,
.OBJC_ASSOCIATION_RETAIN)
return associated
}
func associateObject<ValueType: AnyObject>(
base: AnyObject,
key: UnsafePointer<UInt8>,
value: ValueType) {
objc_setAssociatedObject(base, key, value,
.OBJC_ASSOCIATION_RETAIN)
}
函数就那么长。你可以这样使用它们:
class Miller {} // 这是我们要扩展的类
class Cat { // 每个磨坊主都有一只猫
var name = “Puss”
}
private var catKey: UInt8 = 0 // 我们还是需要这样的模板
extension Miller {
var cat: Cat { // cat「实际上」是一个存储属性
get {
return associatedObject(self, key: &catKey)
{ return Cat() } // 设置变量的初始值
}
set { associateObject(self, key: &catKey, value: newValue) }
}
}
如果你在家可以跟着练习的话,你可以在 playground 中敲下下面几行代码,来确保它能正常工作。
let grumpy = Miller()
grumpy.cat.name // 显示 Puss
grumpy.cat.name = “Hephaestos”
grumpy.cat.name // 显示 Hephaestos
就这么简单!
致谢:这个实现至少一半来自于 Eric-Paul Lecluse。他在扩展中使用了关联对象,我把这个模式提出来作为一个可重用的类,然后我们一起把这个类修改成了你看到的那两个方法。代码是我写的,如果其中有任何错误,都是我的锅。
本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg。
Acer Swift 3笔记本怎么样 Acer Swift 3笔记本上手图赏
Acer Swift 3是宏碁推出的笔记本电脑,具有轻薄时尚等元素,这里为大家带来 Acer Swift 3笔记本上手图赏 ,一起来看看。
14英寸1920*1080的显示屏幕、2.5GHz的英特尔酷睿酷睿i3、i5-7200u/i7处理器、图形128mb英特尔高清显卡620、8GB/256GB的SSD、Windows Hello、指纹识别器,处理速度快可媲美MacBook,售价仅为1398美元(约£1090/1760美元),性价比方面还是不错的。
以上就是 Acer Swift 3笔记本上手图赏 相关内容,希望对你有帮助。
Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望
总结
以上是小编为你收集整理的Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数
总结
以上是小编为你收集整理的Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
ios – Swift 3发布后,Swift 2应用程序是否可以运行?
解决方法
>当Swift 3推出时,您的应用程序是否会在新操作系统上执行?
>推出时,您的应用会在新操作系统上运行吗?
关于第一个问题,是的,你的应用程序将执行,即使它是针对Swift 2编译的.Swift应用程序在其捆绑包中嵌入了Swift运行时库,因此您在这方面是安全的.您会注意到Swift捆绑包总是比Objective-C对应物大4-5 MB,这正是原因所在.
关于第二个问题,与任何新的操作系统版本一样,无法保证您的应用程序能够像以前版本的操作系统那样工作.虽然根据我的经验,Apple在过去的几个OS版本中做了相当不错的工作,尽管你的里程可能会有所不同.
我们今天的关于Swift 扩展「可以」添加存储属性和swift 协议扩展的分享就到这里,谢谢您的阅读,如果想了解更多关于Acer Swift 3笔记本怎么样 Acer Swift 3笔记本上手图赏、Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望、Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数、ios – Swift 3发布后,Swift 2应用程序是否可以运行?的相关信息,可以在本站进行搜索。
本文标签: