将侦听器添加到 class 的全局实例中的变量

Add listener to a variable in a global instance of a class

我有一个用户 Class,它包含该特定用户的详细信息、身份验证状态和一个标志,告诉我我的用户数据是否已被检索:

// 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.. 中的 is_Authenticated 以对我的后续 类.

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

编辑 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 标志。

为此使用 属性 个观察者:

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 以更多地接触命名约定。你的代码很难读。