将Function分配给其他类变量

时间:2019-08-20 03:14:05

标签: swift

很抱歉,如果这个问题问了很多遍,我尝试了许多解决方案,但对我来说却没有任何工作。我正在做这样的非常基本的事情。

class NotificationModel: NSObject {
   var selector = (() -> Void).self
}

其他班级。

class TestNotificationClass1 {
   init() {
      var model = NotificationModel.init()
      model.selector = handleNotification //error is here
   }

   func handleNotification() -> Void {
    print("handle function 1")
   }
}

错误描述:不能将类型为(()-> Void'的值分配为类型为((()-> Void).Type'

1 个答案:

答案 0 :(得分:2)

如果您希望selector能够保留没有参数且没有返回值的任何函数,则将其声明更改为:

var selector: (() -> Void)?

这也使其成为可选。如果您不希望它是可选的,则需要向NotificationModel添加一个初始化器,该初始化器将所需的选择器作为参数,如下所示:

class NotificationModel: NSObject {
    var selector: (() -> Void)

    init(selector: @escaping () -> Void) {
        self.selector = selector

        super.init()
    }
}

class TestNotificationClass1 {
    init() {
        var model = NotificationModel(selector: handleNotification)
    }

    func handleNotification() -> Void {
        print("handle function 1")
    }
}