我使用拆分视图控制器作为初始视图控制器开始我的项目,并从故事板自动启动它.
一般地,通过该用户界面的应用程序有一个且只有一个拆分视图控制器作为根,所以我创建一个静态变量在子类,并将其设置初始化已完成时.
所以我想用swift试试这个行为.
我在iBook上阅读了关于Type属性(带有static和class关键字)的Swift编程语言指南,并尝试了一段代码:
import UIKit
class SplitViewController: UISplitViewController {
class func sharedInstance() -> SplitViewController {
return SplitViewController.instance
}
class let instance: SplitViewController = nil
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
self.initialization()
}
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder);
self.initialization()
}
func initialization() {
SplitViewController.instance = self;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当Xcode说不支持类型属性的class关键字时,我想通了.
你有解决方案吗?
我是Swift的新手,刚刚在文档中遇到过这个问题:
计算属性由类,结构和枚举提供.存储的属性仅由类和结构提供.
这是为什么?枚举的关联值是否与存储属性一样?看起来他们最初存储了属性 - 为什么swift中的类没有存储的类型属性?
基本上,Swift不允许我这样做 -
//类中不支持的类存储属性是指'静态'.
class var hello = "hello"
Run Code Online (Sandbox Code Playgroud)
不过这很好 -
static var hi = "hi"
Run Code Online (Sandbox Code Playgroud)
我知道Swift中Class和Static之间的区别在于Class变量不能存储存储的属性,而Static变量可以.但是,Class和Static变量之间的根本区别在于,静态变量不能在子类中重写,而类变量可以.这是我希望保留的功能.
我知道对这个问题的一个简单的解决方法是使用像这样的hacky修复程序将其作为计算属性 -
class var Greeting : String {
return "Greeting"
}
Run Code Online (Sandbox Code Playgroud)
这确实解决了这个问题,我希望它也可以帮助一些人在线.但是,我想知道是否有人知道Swift为什么会这样,并且不允许在类级变量中存储属性.