在结构中使用静态闭包是否安全?
Is it safe to have static closures in structs?
我已经习惯了 structs
而不是 Swift 中的 classes
,但是如果我可能由于没有 [= =13=] 还是 [weak self]
? (这在 struct 或 protocol 中是不允许的)。事实上,我正在制作所有 static funcs
.
struct OrgAPIservice {
static func getOrganizations(sinceSyncToken: ...
completion:@escaping (_ orgsList: [Organization]?, _ error: AppError?) -> Void) {
apiProvider.request(.getOrganizations(...)) { result in
switch result {
case .success(let response):
case .failure(let error):
completion (nil, getAppErrorFromMoya(with: error))
}
}
}
}
如果函数的调用者是对象,您可以在闭包中包含 weak self
。 self
指的是提供闭包的对象。它不引用拥有闭包的变量。
例如,如果你有一个classMyClass
,那么你可以
class MyClass {
func callApi() {
OrgAPIservice.getOrganizations {
[weak self] in
// ....
}
}
}
我已经习惯了 structs
而不是 Swift 中的 classes
,但是如果我可能由于没有 [= =13=] 还是 [weak self]
? (这在 struct 或 protocol 中是不允许的)。事实上,我正在制作所有 static funcs
.
struct OrgAPIservice {
static func getOrganizations(sinceSyncToken: ...
completion:@escaping (_ orgsList: [Organization]?, _ error: AppError?) -> Void) {
apiProvider.request(.getOrganizations(...)) { result in
switch result {
case .success(let response):
case .failure(let error):
completion (nil, getAppErrorFromMoya(with: error))
}
}
}
}
如果函数的调用者是对象,您可以在闭包中包含 weak self
。 self
指的是提供闭包的对象。它不引用拥有闭包的变量。
例如,如果你有一个classMyClass
,那么你可以
class MyClass {
func callApi() {
OrgAPIservice.getOrganizations {
[weak self] in
// ....
}
}
}