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{
学swift语言能干什么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 来做⼀些常⽤的任务还略显⿇烦,不过作为⼀个年轻的语⾔,⽬前它确实已经能⽤在⽣产环境中写出真正可⽤的 App 了,随着接下去的发展,我相信它会变得越来越好的。
PS:现在我只想 SourceKitService 崩溃的少⼀点…

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。