Swift 中的 NSManagedObject 子类不能使用自定义访问器?

Posted

技术标签:

【中文标题】Swift 中的 NSManagedObject 子类不能使用自定义访问器?【英文标题】:NSManagedObject subclasses in Swift can not use custom accessor? 【发布时间】:2014-09-04 01:20:45 【问题描述】:

我在核心数据生成的 NSManagedObject 子类中使用 Swift。有一个临时的可选属性标题。(可选不是 Swift 的可选,而是 Core Data 的可选。) 所以我需要一个自定义吸气剂。我的代码是

class ShoppingList: NSManagedObject 

    @NSManaged var title: String

    func title() -> String 
        return "something"
    

getter 的 Objective-C 版本可以正常工作。但是,Xcode 告诉我“func title() 是无效的重新声明”。我尝试使用计算属性,但得到“@Managed 属性不能使用计算属性”。

所以我的问题是,在 Swift 版本的 NSManagedObject 子类化中是否有另一种方法来获取自定义访问器(getter)?

【问题讨论】:

【参考方案1】:

您可以为计算属性使用不同的名称,并让它返回标题变量。

@NSManaged var title: String

var myTitle : String 
   return self.title

这对你有用吗? Apple 在很多地方都是这样做的,方法是在前面加上下划线来命名实际的 var,并用相同的名称但没有下划线的计算属性

【讨论】:

我需要的是 Swift 中 Core Data 的瞬态属性中 Objective-C 版本的 getter 的等价物。您的方法是不在核心数据模型文件中定义瞬态属性,而是直接在源文件中使用它。我认为它应该工作。但这不是我想要的。 我不太确定有什么区别。能详细点吗? 在我的示例中,标题是核心数据中的临时属性。当我创建一个新的 ShoppingList 实例时它为零。所以我需要一个 getter 在访问时生成标题。但是,您的方法是让我从标题中生成一些东西,现在它是零。所以这是不可能的。 如果我使用你的方法,我必须首先在核心数据模型中删除标题的定义。然后在源文件中创建它。这将起作用。但是我的模型没有完成,因为模型文件中没有定义瞬态属性。

以上是关于Swift 中的 NSManagedObject 子类不能使用自定义访问器?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的 NSManagedObject 子类不能使用自定义访问器?

swift 1.2 覆盖 NSManagedObject 扩展中的 prepareForDeletion

swift 3 Xcode 8 中的 NSManagedObject 和 CoreData

如何让我的简单对象符合 Swift 中的 NSManagedObject 和 NSCoding

在 Swift 中将存储属性添加到 NSManagedObject 的子类

iOS 14 Beta - Swift UI 中的核心数据错误:任何模型中都没有 NSEntityDescriptions 声明 NSManagedObject 子类