2017-07-19 45 views
0

我有一个用户类,它认为,特定的用户,认证状态并告诉我羯羊或不是我的用户数据的标记的细节的全局实例已检索:一个变量添加监听器一类

// Users class 

class user_Global { 

    static let shared_Instance = user_Global() 
    var is_Retrieved : Bool = false 
    var is_Authenticated : Bool = false 
    var user : users_Status = users_Status.init(name: "Global user", is_Master: false, EY_ID : "N/A", ey_Email : "N/A", UUID : "N/A") 
    } 

// Structure 

struct users_Status{ 

var user_Name : String! 
var is_User_Master : Bool! 
var user_EY_Email : String! 
var user_UUID : String! 
var user_EY_ID : String! 

init(name : String!, is_Master : Bool!, EY_ID : String! ,ey_Email : String!, UUID : String!){ 

    self.user_Name = name 
    self.is_User_Master = is_Master 
    self.user_EY_Email = ey_Email 
    self.user_UUID = UUID 
    self.user_EY_ID = EY_ID 

    } 

} 

进一步在我的应用程序,我有几个功能,我只允许通过身份验证的用户,问题是,这种状态可以改变任何时间。我如何添加一个监听器到这个变量中,例如我的user_Global.shared_Instance..对我的后续类执行操作。

我确实想过使用协议委托方法,但无法使其运作。不知何故,我的协议符合类没有调用协议的功能。

编辑1

class user_Global { 

var refresh_Delegate : user_Data_Refresh! 

static let shared_Instance = user_Global() 
var is_Retrieved : Bool = false 
var is_Authenticated : Bool = false{ 

    didSet{ 

     print(oldValue) 
     print(is_Authenticated) 

    } 

} 
var user : users_Status = users_Status.init(name: "Global user", is_Master: false, EY_ID : "N/A", ey_Email : "N/A", UUID : "N/A"){ 

    didSet{ 

     if user.is_User_Master == true{ 

      print("The user has MASTER Permissions") 
      user_Data_Refresh.refresh_User_State() // This is the line where is get an error 

     }else{ 

      print("Master Auth was terminated!") 

     } 
    } 

} 


} 

// Protocol : 

protocol user_Data_Refresh { 

    func refresh_User_State() 

} 

PS:有一次,我检索从我的数据库中的值user被更新。确认数据已被检索is_Retrieved标志。

回答

1

使用属性观察员此:

class user_Global { 

    static let shared_Instance = user_Global() 
    var is_Retrieved : Bool = false 
    var is_Authenticated : Bool = false { 
     didSet { 
      // Your code here 
     } 
    } 
    var user : users_Status = users_Status.init(name: "Global user", is_Master: false, EY_ID : "N/A", ey_Email : "N/A", UUID : "N/A") 
} 

更新 你有一个协议定义那里user_Global定义了符合本协议var refresh_Delegate : user_Data_Refresh!委托(PS:代表通常是自选)。 中提到的行中的问题:

user_Data_Refresh.refresh_User_State() 

是你不使用委托对象调用的函数,而是你使用它的类型,这是不对的。 替换为

refresh_Delegate.refresh_User_State() 

它应该工作。

注意:它看起来像从后端开发或C/C++或类似的东西转移到Swift。请花时间修改Swift API design guidelines以更多地了解命名约定。你的代码几乎不可读。

+0

感谢您的回复,请参阅编辑。我想调用一个协议函数,但我无法。我已upvoted你的答案..我有一个问题如何使我的其他类符合我的协议执行委托功能。感谢所有的帮助。 – Dravidian

+0

更新了答案。 –

+0

谢谢..是... – Dravidian