从 Swift 中的计算变量创建关键路径 4
Creating a Key Path from a computed var in Swift 4
我有一个 fetchedResultsController
,我想在其中为 Date
添加一个关键路径,所以我没有一天中每一秒的部分。很简单,我想...我会为 MyEntity
创建一个 extension
extension MyEntity {
var dateForSection: String {
get {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
if let time = self.time {
return dateFormatter.string(from: time)
}
return "Unavailable Date"
}
}
}
然后,在 fetchedResultsController
lazy var 声明中的 MyViewController
,我声明 frc
如下:
let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: #keyPath(MyEntity.dateForSection), cacheName: nil)
我得到这个编译器错误:
Argument of '#keyPath' refers to non-'@objc' property 'dateForSection'
在谷歌搜索中,这个问题看到了 2016 年的一些 Swift 错误报告,但我还没有看到任何解决方案。我该如何解决这个问题?
附录
我试过在 var
声明前添加 @objc
。我也试过添加 @objc dynamic
、关闭 Xcode、从命令行核对派生数据、重新启动 Xcode、重新启动我的机器等
我无法重现问题。我用我的实体自动生成的组 class 推出了一个核心数据项目,并添加了一个计算变量:
extension Group {
@objc var yoho : String {
return "yoho"
}
}
然后我在我的延迟获取结果控制器初始化器中修改了同一行:
let frc = NSFetchedResultsController(
fetchRequest:req,
managedObjectContext:self.managedObjectContext,
sectionNameKeyPath:#keyPath(Group.yoho), cacheName:nil)
编译通过。我不知道你的为什么没有。
另一方面,#keyPath
只不过是为你生成的字符串,这里期望的是一个字符串,所以如果你真的无法编译它,就把"dateForSection"
并完成它。当然,这并不意味着它 运行 不会崩溃,但至少它会编译,你可以继续前进。
我有一个 fetchedResultsController
,我想在其中为 Date
添加一个关键路径,所以我没有一天中每一秒的部分。很简单,我想...我会为 MyEntity
extension
extension MyEntity {
var dateForSection: String {
get {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
if let time = self.time {
return dateFormatter.string(from: time)
}
return "Unavailable Date"
}
}
}
然后,在 fetchedResultsController
lazy var 声明中的 MyViewController
,我声明 frc
如下:
let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: #keyPath(MyEntity.dateForSection), cacheName: nil)
我得到这个编译器错误:
Argument of '#keyPath' refers to non-'@objc' property 'dateForSection'
在谷歌搜索中,这个问题看到了 2016 年的一些 Swift 错误报告,但我还没有看到任何解决方案。我该如何解决这个问题?
附录
我试过在 var
声明前添加 @objc
。我也试过添加 @objc dynamic
、关闭 Xcode、从命令行核对派生数据、重新启动 Xcode、重新启动我的机器等
我无法重现问题。我用我的实体自动生成的组 class 推出了一个核心数据项目,并添加了一个计算变量:
extension Group {
@objc var yoho : String {
return "yoho"
}
}
然后我在我的延迟获取结果控制器初始化器中修改了同一行:
let frc = NSFetchedResultsController(
fetchRequest:req,
managedObjectContext:self.managedObjectContext,
sectionNameKeyPath:#keyPath(Group.yoho), cacheName:nil)
编译通过。我不知道你的为什么没有。
另一方面,#keyPath
只不过是为你生成的字符串,这里期望的是一个字符串,所以如果你真的无法编译它,就把"dateForSection"
并完成它。当然,这并不意味着它 运行 不会崩溃,但至少它会编译,你可以继续前进。