swift 1.2 覆盖 NSManagedObject 扩展中的 prepareForDeletion
Posted
技术标签:
【中文标题】swift 1.2 覆盖 NSManagedObject 扩展中的 prepareForDeletion【英文标题】:swift 1.2 override prepareForDeletion in NSManagedObject extension 【发布时间】:2015-04-09 01:18:08 【问题描述】:在 swift 1.2 中重写函数 prepareForDeletion
失败
// Playground - noun: a place where people can play
import UIKit
import CoreData
extension NSManagedObject
@objc func prepareForDeletion()
println("deleting object")
错误:使用 Objective-C 选择器的方法“prepareForDeletion()” 'prepareForDeletion' 与之前的声明冲突 Objective-C 选择器
@objc func prepareForDeletion()
^
CoreData.NSManagedObject:31:14: 注意: 'prepareForDeletion' 之前 在这里声明
@objc func prepareForDeletion()
有人有想法吗?
谢谢 罗恩
【问题讨论】:
【参考方案1】:您不能在同一个类的扩展中覆盖一个类中的方法,这样做总是未定义的行为。
对于在 Swift 中重写 Objective-C 方法,这在 Xcode 6.2,现在可以在 Xcode 6.3 beta 中正确诊断。
注意Objective-C中的相应做法—— 覆盖同一类的 Objective-C 扩展中的方法 – 也是不允许的,见 "Avoid Category Method Name ***es":
如果类别中声明的方法名称与方法相同 在原始类中,或者在同一类的另一个类中的方法 类(甚至是超类),行为是不确定的 方法实现在运行时使用。这不太可能是 如果您在自己的类中使用类别,则会出现问题,但可能会导致 使用类别将方法添加到标准 Cocoa 或 Cocoa Touch 类。
您可以做的是覆盖自定义中的方法
NSManagedObject
子类。
【讨论】:
以上是关于swift 1.2 覆盖 NSManagedObject 扩展中的 prepareForDeletion的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 在同一个项目中使用 Swift 和 Objective c?
Swift 3 - 无法覆盖'imagePickerController'
Swift - UIButton 覆盖 setSelected