Swift中如何化简标准库中冗长的类实例初始化代码
2016-08-01 20:27
190 查看
可能有些童鞋并不知道,在Swift中缩写点符号对于任何类型的任何static成员都有效.
我们实际写一个例子看一下:
以上代码中可以看到,foo类型为CFoo,而CFoo恰好拥有一个静态属性sharedInstance,所以可以使用缩写点符号来完成简化.f变量与foo类似.
咋一看好像只是一个小花招,没啥实际的用处,然而并不尽然,在Swift中要和传统的Objc代码打交道,经常可以看到C样式的枚举初始化代码:
是不是很讨厌呢!我们可以写一个扩展来简化语法(以下是代码摘录):
接着我们可以这样优雅的使用啦:
我们实际写一个例子看一下:
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
相关文章推荐
- Swift中如何化简标准库中冗长的类实例初始化代码
- Swift中如何化简标准库中冗长的类实例初始化代码
- 实例分析: 如何对比JIT优化前后的汇编代码
- MapGuide应用开发系列(四)---- 如何运行第一个.net实例代码
- 如何将solr响应后的namedList转换成json实例代码
- andEngine实例代码如何运行
- 如何修改Revit中墙,梁,管道等的端点位置。实例代码演示修改管道的倾斜角度
- 实例分析: 如何对比JIT优化前后的汇编代码
- Java如何连接Access数据库(两种方式实例代码)
- 在WPF中,如何得到任何Object对象的XAML代码?_.Net实例_电脑学网...
- 如何通过代码终止工作流实例
- Java如何连接Access数据库(两种方式实例代码)
- asp.net C#如何实现当地时区转换的代码实例
- php开发中如何获取、显示checkbox值的代码实例
- 如何通过代码终止工作流实例
- 如何使用Javascript(简称JS)取得LI里的内容(简单易懂的代码实例)
- php开发中如何获取所在全局变量的代码实例
- php中通过Ajax如何实现异步文件上传的代码实例
- jquery如何实现自动打开第一个链接!(实例代码)