Swift编译错误,使用super.init(nonretainedObject :)子类化NSValue

粘土桥

这段代码

class ID<T: AnyObject> : NSValue {
    init(baseObject: T) {
        super.init(nonretainedObject: baseObject)
    }
}

给出此编译器错误:

error: must call a designated initializer of the superclass 'NSValue'
    super.init(nonretainedObject: baseObject)
    ^

我该如何摆脱呢?

我想到的事情

我认为错误可能是因为NSValue初始化器具有AnyObject?类型(请注意:postfix ?)。我在各种[?!]地方尝试了各种类型的转换和后缀,但没有解决任何问题。

另外,大概NSValue(nonretainedObject:)必须调用指定的初始化程序,对吗?

戴维·贝里

NSValue(nonretainedObject:)不是指定的初始值设定项。NSValue参考中列出的唯一初始化程序(以及因此指定的初始化程序)是NSValue(value:CConstVoidPointer, withObjCType type:CString)

其他构造函数都是从类帮助器方法派生的便捷构造函数。

您可以尝试:

init(baseObject: T) {
    super.init(bytes:&baseObject, withObjCType:"^v")
}

“ ^ v”是由使用valueWithNonRetained ...创建的NSValue返回的类型字符串。

不幸的是,我没有想出一种合适的方式baseObject作为CConstVoidPointer传递

除非如此,我能想到的最好的办法是包装NSValue而不是对其进行子类化:

class ID<T:AnyObject> {
    let wrapped:NSValue

    init(baseObject:T) {
        wrapped = NSValue(nonretainedObject:baseObject)
    }
}

终于有了一些工作,但是有点丑陋,基本上是添加了一个方便的构造函数,该构造函数包装了nonretainedObject构造函数,然后在子类中使用它:

extension NSValue {
    convenience init<T:AnyObject>(unretained:T) {
        self.init(nonretainedObject:unretained)
    }
}


class ID<T>:NSValue {
    convenience init<T:AnyObject>(unretained:T) {
        self.init(unretained:unretained)
    }
}

根据您实际尝试进行的分类,可能就足够了?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift编译错误,使用super.init(nonretainedObject :)子类化NSValue

来自分类Dev

Swift子类化-如何覆盖Init()

来自分类Dev

子类化NSObject并使用泛型时发生Swift编译错误

来自分类Dev

在Swift和init(windowNibName)中子类化NSWindowController

来自分类Dev

在Swift和init中子类化NSWindowController(windowNibName)

来自分类Dev

在Swift中进行子类化时了解init()

来自分类Dev

Swift:在super.init初始化自我编译错误之前的方法调用中使用'self'

来自分类Dev

SKSpriteNode子类化Swift

来自分类Dev

为什么在子类化threading.Thread时super().__ init__不起作用?

来自分类Dev

用str为init子类化Tuple

来自分类Dev

在Swift中子类化CIFilter

来自分类Dev

用Swift子类化SKShapeNode

来自分类Dev

在Swift中子类化UITableViewController

来自分类Dev

Swift 3子类化OperationQueue

来自分类Dev

子类化 UITableViewController 以在 Swift 中再次子类化

来自分类Dev

使用setPrototypeOf的数组子类化

来自分类Dev

在Swift中将UIView子类化-错误

来自分类Dev

在Swift中将UIView子类化-错误

来自分类Dev

解析-使用Swift进行子类化?

来自分类Dev

编译可识别子类化的NSWindow实例

来自分类Dev

子类化MKAnnotation错误,符合协议

来自分类Dev

子类化错误:添加原型方法无效

来自分类Dev

子类化 UIButton 给我错误

来自分类Dev

Swift:子类化UIViewController的根视图

来自分类Dev

Swift中的类扩展与子类化?

来自分类Dev

在Swift中子类化SpriteKit类

来自分类Dev

在Swift中将Parse的PFUser子类化

来自分类Dev

在Swift中子类化SpriteKit类

来自分类Dev

Swift:在Tableview中将SlackTextViewController子类化