【发布时间】:2018-09-03 09:29:57
【问题描述】:
我有以下描述国家/地区的类:
class Country: NSObject {
public var name: String
static let england = Country(name: "England")
static let scotland = Country(name: "Scotland")
static let allCountries = [england, scotland]
init(name: String) {
self.name = name
super.init()
}
convenience init?(named name: String) {
guard let country = Country.allCountries.filter( { $0.name == name } ).first else { return nil }
self.init(name: country.name)
}
}
要获得常量Country.england,我会使用:
let england = Country.england
但是,我希望能够使用 convenience init?(named name: String) 从 String 获取此常量,如下所示:
let england = Country(named: "England")
这似乎有点笨拙,这段代码初始化了一个新的“england”实例,而不是采用静态实例。
是否有更快捷的方式来执行此操作? 理想情况下,我只想让 self = country 在 convenience init?(named name: String) 函数中,但我收到错误 cannot assign to value : 'self' 是不可变的。
感谢您的帮助。
【问题讨论】:
-
带有文字字符串的 KVC 根本不是 Swifty ????.
-
专业提示 - 使用
.first(where: { $0.name == name } )而不是.filter( { $0.name == name } ).first -
@AshleyMills 感谢您的提示
-
@vadian touché ;-)
标签: ios swift string static initialization