gpt4 book ai didi

ios - 访问 CKRecordZone 数组中的字段?

转载 作者:行者123 更新时间:2023-11-28 16:02:58 24 4
gpt4 key购买 nike

这是数组的样子:

Optional([<CKRecordZone: 0x155f0dc0; zoneID=_defaultZone:__defaultOwner__, capabilities=(none)>, <CKRecordZone: 0x155e8370; zoneID=MedicalRecord:__defaultOwner__, capabilities=(Atomic,Sync,Share)>])

如您所见,此数组中有两个元素,一个带有 zoneID=_defaultZone,另一个带有 zoneID=MedicalRecord。我怎样才能只获得 zoneID = MedicalRecord 的元素?我尝试了以下但它不起作用:

if let index = recordZone?.index(of: CKRecordZone(zoneName: "MedicalRecord")) {
print("Index is: \(index)")
self.sendHeartRate(id: (recordZone?[index].zoneID)!)
}

它永远不会运行这个 if let block ,因为 index 总是 nil...

提前致谢!

最佳答案

解释

if let block 中的索引始终为 nil,因为在这一行中:

if let index = recordZone?.index(of: CKRecordZone(zoneName: "MedicalRecord")) {

CKRecordZone(zoneName... 是一个全新的对象,与数组中已经存在的对象分开。它可能与您尝试检索的区域名称相同 ( “MedicalRecord”),但它们仍然是两个不同的对象。(见下文。)

引用

我创建的演示代码:

let zone = CKRecordZone(zoneName: "MedicalZone")
let defaultZone = CKRecordZone.default()
let zoneArray = [defaultZone, zone]
let idx = zoneArray.index(of: zone)
print("*** Zone index: \(idx)")
let z = zoneArray[idx!]
print("*** z: \(z)")

if let i = zoneArray.index(of: zone) {
print("*** Index is: \(i)")
print("*** id: \(zoneArray[i].zoneID)!)")
}

let tempZ = CKRecordZone(zoneName: "MedicalZone")

if let index = zoneArray.index(of: tempZ)) {
print("*** Index is: \(index)")
print("*** id: \(zoneArray[index].zoneID)!)")
}

如您所见,数组中的第一个 MedicalZone 与之后创建的 MedicalZone 不同:

(lldb) po zone
<CKRecordZone: 0x6180000b06e0; zoneID=MedicalZone:__defaultOwner__, capabilities=(Atomic,Sync)>


(lldb) po tempZ
<CKRecordZone: 0x6180000b0800; zoneID=MedicalZone:__defaultOwner__, capabilities=(Atomic,Sync)>

关于ios - 访问 CKRecordZone 数组中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40727951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com