我决定在类中获取属性值时使用闭包,但这个值取决于一个单例值(记录的用户名)。

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 ""
}}

07-24 13:23