我想将func internetChanged放在另一个文件中。 (关于可达性)

时间:2018-07-23 03:35:45

标签: swift reachability

我有很多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
        }
    }
}

但是如果我放入另一个文件, 它无法抓住标签, 如果我愿意

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)

2 个答案:

答案 0 :(得分:0)

假设第一个文件中的视图控制器名称为ViewController1

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

因此,如果internetChangedViewController1中,则要从另一个文件中使用它-请使用#selector(ViewController1.internetChanged)

答案 1 :(得分:0)

这个问题尚不清楚,但是您可以为所有ViewController使用子类,并在其中添加连接方法。使用完控制器后,别忘了删除观察者。

Here a reference for subclassing.