我决定在类中获取属性值时使用闭包,但这个值取决于一个单例值(记录的用户名)。
class BrokerTVC: NSViewController, DBTable {
@IBOutlet weak var table: NSTableView!
var mainRequest = { () -> String in
switch LoggedUser.shared.type{
case LoggedUser.shared.admin:
return "select * from broker where approved = true"
case LoggedUser.shared.client:
return "select * from broker where approved = true and ..."
default: return ""
}
return ""
}}
class LoggedUser{
var type: Roles?
var iD: String
var username: String
static let shared = LoggedUser()
private init(){
type = .admin
iD = "(xx, xxxxxx)"
username = "root"
}}
不知怎的,这个闭包无法识别这个singleton的
shared
属性(“LoggedUser”类型的值没有“admin”)。我是否遗漏了闭包工作原理的一些核心原则? 最佳答案
一切都可以结束。
似乎Roles
是一个可选的枚举值,所以您应该这样做。
var mainRequest = { () -> String in
if let type = LoggedUser.shared.type {
switch type {
case .admin:
case .client:
default: return ""
}
}
return ""
}}