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

Где использовать функции многократного использования в IOS Swift?

Новое для программирования IOS, но просто интересно, где лучше всего разместить функции, которые я буду использовать во всем моем коде. Например, я хочу написать несколько функций для выполнения запроса POST для веб-службы и возврата словаря. Может быть, еще одна функция для выполнения некоторых вычислений. Лучше всего создать другой файл .swift и поместить туда все мои функции. И что было бы хорошим именем, чтобы дать файл, если так?

public func postRequest() -> [String:String] {
     // do a post request and return post data
     return ["someData" : "someData"]
}
4b9b3361

Ответ 1

Лучший способ - создать вспомогательный класс со статическими функциями, например:

class Helper{
    static func postRequest() -> [String:String] {
         // do a post request and return post data
         return ["someData" : "someData"]
    }
}

Теперь каждый раз, когда вам нужно использовать postRequest, вы можете просто так: Helper.postRequest()

Я надеюсь, что это поможет!

Ответ 2

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

struct BackendError {
    var message : String
}

struct SuccessCall {
    var json : JSON

    var containsError : Bool {
        if let error = json["error"].string {
            return true
        }
        else {
            return false
        }

    }
}

typealias FailureBlock  = (BackendError) -> Void
typealias SuccessBlock  = (SuccessCall) -> Void

typealias AlamoFireRequest = (path: String, method: Alamofire.Method, data: [String:String]) -> Request
typealias GetFunction = (path: String , data: [String : String], failureBlock: FailureBlock, successBlock: SuccessBlock) -> Void

class Backend {
   func getRequestToBackend (token: String )(path: String , data: [String : String], failureBlock: FailureBlock, successBlock: 

}

В других случаях я часто использую расширения для классов Swift. Как для получения случайного элемента из массива.

extension Array {
    func sampleItem() -> T {
        let index = Int(arc4random_uniform(UInt32(self.count)))
        return self[index]
    }
}

Ответ 3

Обычно я создаю отдельный класс, если у меня есть функции, которые будут использоваться несколькими классами, особенно для тех, которые связаны с сетевыми операциями.

Если у вас есть только отдельные функции, которые будут использоваться, вы можете просто создать статические функции внутри этого класса, чтобы они легко доступны для других классов статическим способом:

class DataController {
    static func getData() -> [String:String] {
        // do some operations
        return ["someData" : "someData"]
    }
}

let data = DataController.getData()  // example

Однако то, что часто имело место для меня (особенно если оно связано с более сложными операциями), состояло в том, что эти сетевые операции потребовали заранее установить начальное соединение или потребовали некоторых начальных настроек, а также выполняли асинхронные операции, которые должны были быть контролируется. Если это так, и вы часто будете называть такие методы, вам может понадобиться создать одноэлементный объект, который вы можете использовать в разных классах и функциях. Таким образом, вы можете выполнить первоначальную настройку или установить начальное соединение только один раз, а затем сделать все остальное по мере необходимости с другими функциями, вместо того чтобы делать их каждый раз, когда функция вызывается.

Создание объекта singleton довольно просто в Swift:

class DataController {
    static let sharedInstance = DataController()  // singleton object

    init() {
        // do initial setup or establish an initial connection
    }

    func getData() -> [String:String] {
        // do some operations
        return ["someData" : "someData"]
    }
}

let data = DataController.sharedInstance.getData()  // example

Для имени класса я обычно называю его чем-то вроде DataController или DataHelper, но все, что имеет смысл как класс "помощник", будет работать.

Надеюсь, что это поможет:)

Ответ 4

Вы можете создать отдельный класс swift, назовите его WebServicesManager.swift и напишите все методы, связанные с веб-запросами.

Вы можете использовать методы класса или одноэлементный шаблон для доступа к методам.