IOS Swift中可重用函数的位置?
IOS编程的新手,但只是想知道哪里是最好的地方放我将使用我的代码的function。 例如,我想编写几个函数来执行POST请求到Web服务并返回一个字典。 也许另一个函数做一些计算。 最好是创build另一个.swift文件,并把我所有的function放在那里。 如果是这样的话,那么给这个文件什么名字呢?
public func postRequest() -> [String:String] { // do a post request and return post data return ["someData" : "someData"] }
最好的方法是用静态函数创build一个辅助类,如下所示:
class Helper{ static func postRequest() -> [String:String] { // do a post request and return post data return ["someData" : "someData"] } }
现在每次你需要使用postRequest
你可以像这样使用: Helper.postRequest()
我希望能帮到你!
对于可重用的function,这取决于我决定使用。 对于这个特定的情况,我使用一个单独的文件,因为当应用程序发展时,发布到后端会变得更加复杂。 在我的应用程序中,我使用了一个后端类,以及各种帮助类:
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] } }
我通常创build一个单独的类,如果我有多个类将使用的function,尤其是涉及networking操作的function。
如果你只有一些独立的函数可以使用,那么你可以简单的在这个类中创build静态函数,这样就可以很容易地被其他类以静态方式访问:
class DataController { static func getData() -> [String:String] { // do some operations return ["someData" : "someData"] } } let data = DataController.getData() // example
然而,对于我来说,经常遇到这种情况(特别是涉及更复杂的操作时),这些networking操作需要事先build立初始连接,或者需要一些初始设置,并且还需要执行需要控制的asynchronous操作。 如果是这种情况,你通常会调用这样的方法,你可能想要创build一个单独的对象,你可以在不同的类和函数中使用它们。 这样,你可以进行初始设置或build立初始连接一次,然后根据需要用其他function完成剩下的工作,而不是每次调用函数时都执行。
在Swift中创build一个单例对象非常简单:
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
,但是任何有意义的“辅助”类都可以工作。
希望这可以帮助 :)
您可以创build一个单独的swift类,可以将其命名为WebServicesManager.swift
,并将与Web请求相关的所有方法写入其中。
您可以使用类方法或单例模式来访问方法。