在Swift中的下面的代码中,每次调用变量‘整型’时还是在声明变量时执行闭包?
let integer: Int = {
return 1
}()有人知道那()叫什么吗?当我省略它时,会出现一个代码时错误,它告诉错误是什么,但它将()简单地称为'()',而不告诉我这个错误是什么,也没有告诉我,当将'()‘放在上面的示例代码中时,它称为’()‘做什么。
函数生成预期的类型'Int';您是想用'()‘来调用它吗?
以下代码是我在实际代码中使用()用于生产的地方,如果有人想知道的话:
var sharableZoneID = CKRecordZone.ID(zoneName: DatabaseNameStrings.recordZoneName, ownerName: CKCurrentUserDefaultName)
var userRecordID: CKRecord.ID? = {
var localUserRecordID: CKRecord.ID? = nil
containerCourier.fetchUserRecordID() {
(recordID: CKRecord.ID?, error: Error?) in
if let error = error {
print(error.localizedDescription)
}
if let recordID = recordID {
localUserRecordID = recordID
sharableZoneID = CKRecordZone.ID(zoneName: DatabaseNameStrings.recordZoneName, ownerName: recordID.zoneID.ownerName)
} else {
print("couldn't get current user record id")
}
}
return localUserRecordID
}()发布于 2022-04-05 07:06:43
首先,您需要使它成为一个计算属性,而不是一个闭包。
var sharableZoneID = CKRecordZone.ID(zoneName: DatabaseNameStrings.recordZoneName, ownerName: CKCurrentUserDefaultName)
var userRecordID:CKRecord.ID? = {
var localUserRecordID: CKRecord.ID? = nil
containerCourier.fetchUserRecordID() {
(recordID: CKRecord.ID?, error: Error?) in
if let error = error {
print(error.localizedDescription)
}
if let recordID = recordID {
localUserRecordID = recordID
sharableZoneID = CKRecordZone.ID(zoneName: DatabaseNameStrings.recordZoneName, ownerName: recordID.zoneID.ownerName)
} else {
print("couldn't get current user record id")
}
}
return localUserRecordID
}第二,调用containerCourier.fetchUserRecordID() {是异步的,所以这个计算属性总是返回零,所以您需要这样做
func getId(completion:@escaping((CKRecord.ID?) ->())) {
var sharableZoneID = CKRecordZone.ID(zoneName: DatabaseNameStrings.recordZoneName, ownerName: CKCurrentUserDefaultName)
containerCourier.fetchUserRecordID() {
(recordID: CKRecord.ID?, error: Error?) in
if let error = error {
print(error.localizedDescription)
completion(nil)
}
if let recordID = recordID {
sharableZoneID = CKRecordZone.ID(zoneName: DatabaseNameStrings.recordZoneName, ownerName: recordID.zoneID.ownerName)
completion(recordID)
} else {
print("couldn't get current user record id")
completion(nil)
}
}
}https://stackoverflow.com/questions/71747352
复制相似问题