swift全局变量定义与使用
来源:互联网 发布:老滚 5 自动退出 知乎 编辑:程序博客网 时间:2024/05/06 08:38
转自: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 来做一些常用的任务还略显麻烦,不过作为一个年轻的语言,目前它确实已经能用在生产环境中写出真正可用的 App 了,随着接下去的发展,我相信它会变得越来越好的。
PS:现在我只想 SourceKitService 崩溃的少一点…
- swift全局变量定义与使用
- Swift定义一个全局变量字符串
- Android全局变量的定义与使用
- Android全局变量的定义与使用
- Android全局变量的定义与使用
- Android全局变量的定义与使用
- Android全局变量的定义与使用
- Android全局变量的定义与使用
- Android全局变量的定义与使用
- js动态定义全局变量与使用
- android中的全局变量定义与使用
- Android全局变量的定义与使用
- C语言中的全局变量定义与使用
- c++中的全局变量的定义与使用
- 定义和使用全局变量
- swift -变量的定义与使用
- swift -基本数据类型的定义与使用
- swift 变量定义与使用+个人经验
- 贪心算法
- python中的 字符串与list的互相转换 (join函数的使用)
- 网易游戏第二场 - 题目3 : 神奇的数
- class,指令,表单控件
- PHP中获取当前页面的完整URL
- swift全局变量定义与使用
- hdoj--5025--Saving Tang Monk(bfs三维标记)
- Redis、mongo、memcahe的对比和区别
- 指针数组和数组指针的区别
- 简单的android蓝牙通信技术
- 如何严格设置php中session过期时间
- openlayers 3 加载地图瓦片数据
- Android入门各种小错误
- android图片压缩的3种方法实例