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

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

概述可能有些童鞋并不知道,在Swift中缩写点符号对于任何类型的任何static成员都有效. 我们实际写一个例子看一下: import UIKitclass CFoo{ static let sharedInstance = CFoo()}struct SFoo{ static let sharedInstance = SFoo()}let foo:CFoo = .sh

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

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

import UIKitclass CFoo{    static let sharedInstance = CFoo()}struct SFoo{    static let sharedInstance = SFoo()}let foo:CFoo = .sharedInstancelet 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中如何化简标准库中冗长的类实例初始化代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1073581.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存