您当前的位置: 首页 >  swift

Swift中如何化简标准库中冗长的类实例初始化代码

发布时间:2016-08-01 20:27:07 ,浏览量:0

可能有些童鞋并不知道,在Swift中缩写点符号对于任何类型的任何static成员都有效.

我们实际写一个例子看一下:

import UIKit class CFoo{ static let sharedInstance = CFoo()
} struct SFoo{ static let sharedInstance = SFoo()
} let foo:CFoo = .sharedInstance let f:SFoo = .sharedInstance

以上代码中可以看到,foo类型为CFoo,而CFoo恰好拥有一个静态属性sharedInstance,所以可以使用缩写点符号来完成简化.f变量与foo类似.

咋一看好像只是一个小花招,没啥实际的用处,然而并不尽然,在Swift中要和传统的Objc代码打交道,经常可以看到C样式的枚举初始化代码:

animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)

是不是很讨厌呢!我们可以写一个扩展来简化语法(以下是代码摘录):

extension CAMediaTimingFunction
{ // 这个属性会在第一次被访问时初始化。 // (需要添加 @nonobjc 来防止编译器 //  给 static(或者 final)属性生成动态存取器。) @nonobjc static let EaseInEaseOut = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) // 另外一个选择就是使用计算属性, 它同样很有效, // 但 *每次* 被访问时都会重新求值: static var EaseInEaseOut: CAMediaTimingFunction { // .init 是 self.init 的简写 return .init(name: kCAMediaTimingFunctionEaseInEaseOut)
    }
}

接着我们可以这样优雅的使用啦:

animation.timingFunction = .EaseInEaseOut
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    105952博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0543s