2015-10-24 4 views
0

У меня есть класс, чтобы проверить подключение к Интернету, что я нашел здесь: Check for internet connection with Swiftбыстра функция обруча в другой функции

В моих методах я использую его:

 override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
     if Reachability.isConnectedToNetwork() == false { 
      let alert = UIAlertView(title: "No Internet Connection", message: "Make sure your device is connected to the internet.", delegate: nil, cancelButtonTitle: "OK") 
      alert.show() 
      return 
     } 
    } 

, но я могу сделать декоратор или что-то написать что-то вроде:

@check_internet_connection 
override func viewWillAppear(animated: Bool) { 

} 

или, например, использовать его для всех методов в классе:

@check_internet_connection 
class MyClass: UIViewController { 
    ... 
} 

ответ

0

В Swift это называется Attributes. В настоящее время (с Swift 2.1) вы не можете определить свои собственные.

Почему бы не написать глобальную функцию для обработки этого?

// In global scope 
func check_internet_connection() -> Bool { 
    if Reachability.isConnectedToNetwork() == false { 
     let alert = UIAlertView(title: "No Internet Connection", message: "Make sure your device is connected to the internet.", delegate: nil, cancelButtonTitle: "OK") 
     alert.show() 
     return false 
    } else { 
     return true 
    } 
} 

… 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    if !check_internet_connection() { return } 
} 
0

Наследование подход

Вы можете создать ReachabilityAwareViewController в качестве базового класса.

class ReachabilityAwareViewController: UIViewController{ 

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
     if Reachability.isConnectedToNetwork() == false { 
      // your code goes here 
     } 
    } 
} 

и создать подкласс, который наследует все поведение от ReachabilityAwareViewController.

class myViewController: ReachabilityAwareViewController{ 
    // .. 
} 

Состав подход

Этот подход больше похож на декоратора. Использование расширения протокола

protocol ReachabilityAware{ 
    func checkReachibility() 
} 

extension ReachabilityAware where Self: UIViewController{ 

    func checkReachibility(){ 
     if Reachability.isConnectedToNetwork() == false { 
      let alertController = UIAlertController(title: "No Internet Connection", message: "Make sure your device is connected to the internet.", preferredStyle: .Alert) 
      let okAction = UIAlertAction(title: "OK", style: .Cancel){ action in } 
      alertController.addAction(okAction) 
      presentViewController(alertController, animated: true, completion: nil) 
     } 
    } 
} 

class myViewController: UIViewController, ReachabilityAware{ 

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
     checkReachibility() 
    } 
}