Artem  Misesin
Artem Misesin

Reputation: 383

Property closure can't see my singleton shared properties

I decided to go with closures when getting a value of a property in my class, but this value depends on a singleton value (logged user name).

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

Somehow, this closure doesn't recognize the shared property of this singleton (Value of type "LoggedUser" does not have "admin"). Am I missing out on some core principles of how closures work?

Upvotes: 0

Views: 30

Answers (1)

Grzegorz Krukowski
Grzegorz Krukowski

Reputation: 19822

Everything is ok with a closure. It seems that Roles is an optional enum value - so you should do it this way.

var mainRequest = { () -> String in
    if let type = LoggedUser.shared.type {
        switch type {
            case .admin:
            case .client:
            default: return ""
        }
    }
    return ""
}}

Upvotes: 1

Related Questions