首页 > 解决方案 > 我想把 func internetChanged 放在另一个文件中。(关于可达性)

问题描述

我有很多 viewController 会使用可达性,所以我想放入另一个文件,这是我的代码

func internetConnect() {
    NotificationCenter.default.addObserver(self, selector: #selector(internetChanged), name: Notification.Name.reachabilityChanged, object: reachability)
    do{
        try reachability.startNotifier()
    }catch{
        print("could not start reachability notifier")
    }
}

@objc func internetChanged(note: Notification) {
    let reachability = note.object as! Reachability
    if reachability.connection != .none{
        DispatchQueue.main.async {
            self.internetLabel.isHidden = true
        }
    }else{
        DispatchQueue.main.async {
            self.internetLabel.isHidden = false
        }
    }
}

但是如果我放入另一个文件,它就无法捕捉到标签,如果我 uesd

func internetConnect(label:UILabel) {
    NotificationCenter.default.addObserver(self, selector: #selector(internetChanged), name: Notification.Name.reachabilityChanged, object: reachability)
    do{
        try reachability.startNotifier()
    }catch{
        print("could not start reachability notifier")
    }
}

标签仍然无法放入

selector: #selector(internetChanged)

标签: swiftreachability

解决方案


假设您的视图控制器在第一个文件中的名称是ViewController1.

如果您未添加此功能extension ViewController1 { ... } - 那么对于选择器,您需要显式指定此方法所在的视图控制器。

所以如果internetChangedViewController1,那么从另一个文件中使用它 - 使用#selector(ViewController1.internetChanged)


推荐阅读