Swift4.0的小改动
2017-11-28 本文已影响87人
ibiaoma
1、字体方面的一些重命名
NSFontAttributeName --- .font
//或者NSAttributedStringKey.font
NSForegroundColorAttributeName --- .foregroundColor
//NSAttributedStringKey.foregroundColor
NSStrikethroughStyleAttributeName --- .strikethroughStyle
//NSAttributedStringKey.strikethroughStyle
//字符串类型的,添加rawValue
NSAttributedStringKey.font.rawValue
//大部分类似以下,涉及富文本的方法均已改为了NSAttributedStringKey类型
addAttributes(_ attrs: [NSAttributedStringKey : Any] = [:], range: NSRange)
2、Swift4.0中不再允许复写扩展中的方法
父类
extension BaseViewController{
@objc func setupUI() {
view.backgroundColor = UIColor.orange
}
}
子类
extension HomeViewController{
override func setupUI() {
super.setupUI()
}
}
在父类的方法名前加@objc,否则报错 Declarations in extensions cannot override yet
3、 @objcMembers
在Swift 4中继承 NSObject 的 swift class 不再默认全部 bridge 到 OC,
如果我们想要使用的话我们就需要在 class前面加上@objcMembers 这么一个关键字
引用: 在 swift 3 中除了手动添加 @objc 声明函数支持 OC 调用还有另外一种方式:继承 NSObject。
class 继承了 NSObject 后,编译器就会默认给这个类中的所有函数都标记为 @objc ,支持 OC 调用。
苹果在Swift 4 中苹果修改了自动添加 @objc 的逻辑:一个继承 NSObject 的 swift 类不再默认给所有函数添加 @objc。
只在实现 OC 接口和重写 OC 方法时才自动给函数添加 @objc 标识。