IOS Swift中的可重用函数放在哪里?
对IOS编程还不熟悉,但我只是想知道在哪里放置我将在代码中使用的函数是最好的。例如,我想编写一些函数来执行对web服务的POST请求并返回字典。也许另一个函数可以做一些计算。最好创建另一个.swift文件并将我的所有函数放在那里。如果是这样的话,给这个文件起个什么好名字呢IOS Swift中的可重用函数放在哪里?,ios,swift,Ios,Swift,对IOS编程还不熟悉,但我只是想知道在哪里放置我将在代码中使用的函数是最好的。例如,我想编写一些函数来执行对web服务的POST请求并返回字典。也许另一个函数可以做一些计算。最好创建另一个.swift文件并将我的所有函数放在那里。如果是这样的话,给这个文件起个什么好名字呢 public func postRequest() -> [String:String] { // do a post request and return post data return ["so
public func postRequest() -> [String:String] {
// do a post request and return post data
return ["someData" : "someData"]
}
最好的方法是使用静态函数创建一个helper类,如下所示:
class Helper{
static func postRequest() -> [String:String] {
// do a post request and return post data
return ["someData" : "someData"]
}
}
现在,每次需要使用postRequest
时,您都可以这样使用:Helper.postRequest()
我希望这对你有帮助 如果我有多个类将使用的函数,特别是涉及网络操作的函数,我通常会创建一个单独的类 如果您只需要使用单独的函数,只需在该类中创建静态函数,其他类就可以以静态方式轻松访问该类:
class DataController {
static func getData() -> [String:String] {
// do some operations
return ["someData" : "someData"]
}
}
let data = DataController.getData() // example
然而,我经常遇到的情况(尤其是涉及更复杂的操作时)是,这些网络操作需要事先建立初始连接或需要一些初始设置,并且它们还执行需要控制的异步操作。如果是这种情况,并且经常调用此类方法,则可能需要创建一个可以在不同类和函数中使用的单例对象。通过这种方式,您可以只执行一次初始设置或建立初始连接,然后根据需要对其他函数执行其余操作,而不是每次调用该函数时都执行这些操作
在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
,但是任何作为“helper”类的东西都可以
希望这有帮助:)对于可重用函数,这取决于我决定使用什么。对于这种特殊情况,我使用一个单独的文件,因为当应用程序发展时,发布到后端将变得更加复杂。在我的应用程序中,我使用一个后端类和各种帮助器类:
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]
}
}
您可以创建一个单独的swift类,可以将其命名为
WebServicesManager.swift
,并在其中编写与web请求相关的所有方法
您可以使用类方法或单例模式来访问这些方法。这是一个非常老的问题,但我想补充一些要点。 有几个选项,基本上你可以用Swift写你的实用函数- 具有静态函数的类。比如说
class CommonUtility {
static func someTask() {
}
}
// uses
CommonUtility.someTask()
同样,您也可以使用类方法而不是静态方法,但是这些函数可以被子类覆盖,而不是静态函数
class CommonUtility {
class func someTask() {
}
}
// uses
CommonUtility.someTask()
其次,您还可以拥有全局函数,这些函数不是任何类的一部分,可以通过您的应用程序访问任何位置,只需输入名称即可
func someTask() {
}
但是,选择一个而不是另一个是非常主观的,我认为在这种特殊情况下,创建一个带有static
函数的类是可以的,您需要实现联网功能,但如果您有一些功能只执行一项任务,而不是Global
功能,这是一种可行的方法,因为Global
功能更加模块化,并将单个任务分离出来,以实现单个功能
对于
static
函数,如果我们访问其中一个静态成员,整个类将加载到内存中。但对于全局函数,只有该特定函数将加载到mem中创建一个单独的swift文件,并将所有此类函数放入该文件中。您可以在整个代码中使用它。谢谢!因此,只需简单地将其命名为Helper.swift就可以了。实践中?我通常有很多Helper,所以我会有AnimationHelper.swift、CoreDataHelper.swift等等,试着打破由它所做的作业分隔的Helper类func postRequest()需要是一个静态func postRequest()才能使用Helper.postRequest()调用它?xCode告诉我是这样的。是的,很抱歉必须这样做,否则您需要创建一个要使用的对象。我更新了帖子谢谢。另外,助手中的另一个类如何调用postRequest()?当它变得静止时,我很难做到这一点?这看起来很酷。您有soe示例应用程序吗?我是个新手,这对我有很大帮助。你能解释一下哪个是静态会员吗?