Подтвердить что ты не робот

Как глобальные функции определены в Swift?

Я написал простую функцию, которая отображает предупреждение при его вызове. Я хотел бы использовать эту функцию в нескольких viewControllers. Прямо сейчас у меня есть тот же самый бит, который скопирован в нижней части каждого viewController, но я не могу не думать о том, что лучший способ.

Как определить функцию, которая может быть вызвана с любого viewController?

Только для справки я буду вставлять свою функцию ниже, но это общий вопрос. Я бы хотел найти красноречивый способ управления клавиатурой одинаково во всех контроллерах представлений.

func displayAlert(title:String, error:String, buttonText: String) {

    // Create the alert
    var alert = UIAlertController(title: title, message: error, preferredStyle: UIAlertControllerStyle.Alert)

    // Add an action
    alert.addAction(UIAlertAction(title: buttonText, style: .Default, handler: { action in

        // Dismiss when the button is pressed
        self.dismissViewControllerAnimated(true, completion: nil)

    }))

    // Add it to viewController
    self.presentViewController(alert, animated: true, completion: nil)
}
4b9b3361

Ответ 1

Если вы не объявите функцию как private или fileprivate, которая ограничивает видимость файла или области, где она определена, вы можете использовать ее в любом месте модуля, если объявлено как internal (по умолчанию), а также из внешних модулей, если объявлено как public или open.

Однако, поскольку вы говорите, что вам это нужно только для контроллеров, почему бы не реализовать его как расширение для контроллера представления?

extension UIViewController {
    func displayAlert(title:String, error:String, buttonText: String) {
        ...
    }
}

Ответ 2

По умолчанию вы получаете файл "ViewController.swift" в вашем проекте. Вы можете поместить в него глобальную функцию по умолчанию . "Проверьте интернет соединение"

import SystemConfiguration

class func connectedToNetwork() -> Bool { 
    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)

    guard let defaultRouteReachability = withUnsafePointer(&zeroAddress, {
                SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
     }) else {
         return false
     } 

     var flags : SCNetworkReachabilityFlags = []
     if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == false {
          return false                
     }


     let isReachable = flags.contains(.Reachable)        
     let needsConnection = flags.contains(.ConnectionRequired)          
          return (isReachable && !needsConnection)

}

И позвони им по

let testConn = ViewController.connectedToNetwork()