新存储 属性 总是 returns 无 | iOS Swift
New stored property always returns nil | iOS Swift
使用扩展为现有 class 创建的新存储 属性。在获取价值的同时,它总是返回零值。下面的代码是我尝试添加新存储的 属性.
var IdentifiableIdKey = "kIdentifiableIdKey"
extension EKEvent {
public var customId: Int {
get {
return (objc_getAssociatedObject(self, &IdentifiableIdKey) as? Int) ?? 0
}
set {
print("\(newValue)")
objc_setAssociatedObject(self, &IdentifiableIdKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}
利用率
let eventStore = EKEventStore()
let calendars = eventStore.calendars(for: .event)
for calendar in calendars {
if calendar.title == "Events" {
let oneMonthAgo = NSDate(timeIntervalSinceNow: -30*24*3600)
let oneMonthAfter = NSDate(timeIntervalSinceNow: +30*24*3600)
let predicate = eventStore.predicateForEvents(withStart: oneMonthAgo as Date, end: oneMonthAfter as Date, calendars: [calendar])
let events = eventStore.events(matching: predicate)
for event in events {
print("evnet id \(event.customId)")
}
}
}
有人帮我找出我犯的错误。提前致谢。
Swift 中的扩展只能添加 computed 实例属性和 computed 类型属性 https://docs.swift.org/swift-book/LanguageGuide/Extensions.html
叫做objc_setAssociatedObject。看到最后的“对象”了吗? Int 不是对象。把你的 newValue 变成一个 NSNumber 这样你就有了一个对象。所以那肯定不行。
如果您的 class 不是 @objc class,那么 可能 是个问题。
事实是 objc_getAssociatedObject/objc_setAssociatedObject
为对象实例赋值,因此它只能与该实例一起存在。由于您的自定义 属性 未被 EventKit 序列化,因此在请求后新获得的事件实例自然没有关联对象。
使用扩展为现有 class 创建的新存储 属性。在获取价值的同时,它总是返回零值。下面的代码是我尝试添加新存储的 属性.
var IdentifiableIdKey = "kIdentifiableIdKey"
extension EKEvent {
public var customId: Int {
get {
return (objc_getAssociatedObject(self, &IdentifiableIdKey) as? Int) ?? 0
}
set {
print("\(newValue)")
objc_setAssociatedObject(self, &IdentifiableIdKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}
利用率
let eventStore = EKEventStore()
let calendars = eventStore.calendars(for: .event)
for calendar in calendars {
if calendar.title == "Events" {
let oneMonthAgo = NSDate(timeIntervalSinceNow: -30*24*3600)
let oneMonthAfter = NSDate(timeIntervalSinceNow: +30*24*3600)
let predicate = eventStore.predicateForEvents(withStart: oneMonthAgo as Date, end: oneMonthAfter as Date, calendars: [calendar])
let events = eventStore.events(matching: predicate)
for event in events {
print("evnet id \(event.customId)")
}
}
}
有人帮我找出我犯的错误。提前致谢。
Swift 中的扩展只能添加 computed 实例属性和 computed 类型属性 https://docs.swift.org/swift-book/LanguageGuide/Extensions.html
叫做objc_setAssociatedObject。看到最后的“对象”了吗? Int 不是对象。把你的 newValue 变成一个 NSNumber 这样你就有了一个对象。所以那肯定不行。
如果您的 class 不是 @objc class,那么 可能 是个问题。
事实是 objc_getAssociatedObject/objc_setAssociatedObject
为对象实例赋值,因此它只能与该实例一起存在。由于您的自定义 属性 未被 EventKit 序列化,因此在请求后新获得的事件实例自然没有关联对象。