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

如何覆盖这个 Swift 属性?

Swift - UIViewController 与 UITableViewController 中的覆盖函数

从 swift 1.2 迁移后 swift2 中的 healthKit 错误