2017-05-10 6 views
0

私はクラスでプロパティの値を取得するときにクロージャを使うことにしましたが、この値はシングルトンの値(ログに記録されたユーザー名)に依存します。プロパティクロージャは私のシングルトンの共有プロパティを見ることができません

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

どういうわけか、この閉鎖は、(「管理者」を持っていないバリュータイプの「LoggedUser」)は、このシングルトンのsharedプロパティを認識しません。閉鎖の仕組みのいくつかの基本原則を見逃していますか?

答えて

1

すべては閉鎖でOKです。 Rolesはオプションの列挙型の値なので、このようにする必要があります。シングルトンプロパティは `type`が、オプションのタイプであったため、

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

理由があったので、私は' switch'声明別のことだ –

+0

まあ、それをアンラップしなければならなかった:)私は私の答えを更新しました –

関連する問題