![](/img/trans.png)
[英]Why I cannot pass the correct argument to my static function in Swift?
[英]Why can't I initialize a static variable by calling a static function in Swift?
據我所知,從Xcode 6.3 / Swift 1.2開始,我可以在類中使用靜態變量和方法。 但是,當我嘗試通過調用靜態函數初始化靜態變量時,編譯器不喜歡它(我在下面的示例中得到錯誤'使用未解析的標識符getDefaultString')。 這是一個演示我的問題的片段:
import Foundation
public class Settings {
private static var _bundle = NSBundle.mainBundle()
static func getDefaultString(key: String) -> String {
return _bundle.objectForInfoDictionaryKey(key) as! String
}
private static var _server = getDefaultString("DefaultServer")
public class var server: String {
get { return _server }
set { _server = newValue }
}
}
有人能幫助我理解為什么我不能這樣做嗎?
這應該工作:
private static var _server = Settings.getDefaultString("DefaultServer")
我不確切地知道為什么,似乎在游戲中存在某種假設,即在其前面沒有類型限定的方法是實例方法。 但這並不完全有效。 例如,這會在游樂場產生有趣的結果
class Foo {
static func initFoo() -> String {
return "static"
}
func initFoo() -> String {
return "instance"
}
static var foo: String = initFoo()
}
Foo.foo
...不需要在initFoo()前面限定類型,但仍然會選擇靜態類型。 可能是一個小錯誤。
你正在強制解開一個可能的(和實際的) nil
對象。
return _bundle.objectForInfoDictionaryKey(key) as! String
NSBundle
的objectForInfoDictionaryKey
可以返回nil - 它的聲明:
func objectForInfoDictionaryKey(key: String) -> AnyObject?
我的編輯,作為一個操場:
import Foundation
class Settings {
private static var _bundle = NSBundle.mainBundle()
static func getDefaultString(key: String) -> String? {
return _bundle.objectForInfoDictionaryKey(key) as? String
}
private static var _server = Settings.getDefaultString("DefaultServer")
class var server: String? {
get { return _server }
set { _server = newValue }
}
}
Settings.server
你可以,當然,從備用nil
在一些其他的方式,如果你喜歡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.