Reputation: 383
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
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