swift全局变量定义与使用

149 篇文章 0 订阅
33 篇文章 0 订阅

转自:http://imtx.me/archives/1916.html


半年前在第一时间接触 Swift,还参与过一次主题演讲(见《和 Swift 亲密接触的这半个月…》)不过很快这股新鲜劲过后就中断了。事隔几月,因为最近正在抓紧时间完成我的那个用 Swift 写的微博客户端,于是我又开始好好的学习和使用 Swift 了。

正所谓掌握一样技术最好的办法就是用它来做一个东西,于是这段时间的实战让我对 Swift 的理解更深了一层,也积累了一些使用技巧。今天就分享一则:如何正确地定义一个类变量(和类常量)。

Swift 语言对于无论是静态语言过来还是动态语言过来的开发者来说,都有点点不适应,很多问题的解决思路不能用已经习以为常的方法去做。比如一个很常用的:如何定义类变量(和类常量)?

Swift 支持用 class func 来修饰一个「类方法」,然而却不能用「class var」和「class let」来指定类变量和类常量,一旦你尝试这样做了,那么 Xcode 会提示你:Class variable not yet supported。真是遗憾…

不过从这个提示可以看出,Class variable 的支持只是时间问题。那么现阶段我们要怎么完成这一目标?总不能用丑陋的 Workaround 吧。办法还是有的,我从 Apple 官方的例子中学到了如何去定义一个类级的常量和变量,那就是用 struct。

来个 demo 你就明白了:

class MyClass { 
     struct Constants { 
         static let name = "MyClass" 
     } 
     struct Variables { 
         static var age = 0 
     } 
 }

然后在调用的时候,就可以这样来调用: MyClass.Constants.name 和 MyClass.Variables.age

虽然中间还隔了一层 Constants 和 Variables,但是我觉得这样也挺好,相当于有了一个 Prefix,直接看代码时就知道是常量还是变量了。如果你不喜欢这种方式,也可以用 computed property 的形式来模拟真实的类变量(常量)的调用。比如:

extension MyClass { 
    class var name: String {
       get {
           return Constants.name
       }
    }
    class var age: Int {
        get {
            return Variables.age
        }
        set {
            Variables.age = newValue
        }
    } 
 }

定义了这种方式后,就可以直接用 MyClass.name 和 MyClass.age 来访问类常量或修改类变量了。

这种方式在语法上兼容了未来会得到支持的类变量和类常量,但就是自己要写一大堆 getter 和 setter,有点麻烦,大家可以根据自己的需要决定是不是要采用这种方式。

关于本文的 demo 代码,大家可以粘贴进「swift」这个命令行工具来实践一下。效果正如我们想要的那样,常量不允许修改,变量可以修改,所有的这些操作都是在 MyClass 上进行,而不需要实例化。

Swift Class Variables

虽然现在用 Swift 来做一些常用的任务还略显麻烦,不过作为一个年轻的语言,目前它确实已经能用在生产环境中写出真正可用的 App 了,随着接下去的发展,我相信它会变得越来越好的。

PS:现在我只想 SourceKitService 崩溃的少一点…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值