首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Swift中扩展SCNNode

在Swift中扩展SCNNode
EN

Stack Overflow用户
提问于 2015-01-16 22:20:55
回答 1查看 2.6K关注 0票数 4

我想用Swift扩展SCNNode (如果可能的话)。以下是我的尝试:

代码语言:javascript
复制
class MyNode : SCNNode {

    override init(geometry: SCNGeometry) -> SCNNode {
        return super.init(geometry)
    }

    /* Xcode required this */
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

->操作符被标记为一个错误:“行上的连续声明必须由;分隔”。

我知道这是不对的,但如果我幽默Xcode,它“修正”它如下:

代码语言:javascript
复制
override init(geometry: SCNGeometry); -> SCNNode {

这是无稽之谈,然后Xcode会抱怨“预期的声明”。

我不太理解SCNNode实现--如果我在Xcode中查看它,它都被声明为抽象(在注释中),并且没有提供任何实现。文档并不建议从SCNNode扩展任何内容,而是直接实例化它,所以我假设我应该能够扩展它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-16 22:34:12

你可以简单地做:

代码语言:javascript
复制
class MyNode : SCNNode {
    /* Xcode required this */
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

它将从基类继承指定的初始化项。

如果您想要指定自己的接受几何的初始化项,则必须调用基类的指定初始化项,所以我要说,这将是您想要的:

代码语言:javascript
复制
class MyNode : SCNNode {
    init(geometry: SCNGeometry) {
        super.init()
        self.geometry = geometry
    }
    /* Xcode required this */
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

您在SCNNode.h代码中看到的初始化器是从目标C方法nodeWithGeometry翻译的初始化器(我相信是自动的)。我相信这是一个方便的初始化器,即使它没有明确地标记为这样,我个人认为这是自动头文件翻译的一个缺陷/限制。文献资料特别指出:

为了一致性和简单性,Objective工厂方法在Swift中被映射为方便的初始化器.

不要被注释中的单词abstract搞混;这是HeaderDoc标记,用于对方法的简短描述,即在节录或摘要的意义上使用“抽象”。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27993720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档