【发布时间】:2014-08-12 18:08:29
【问题描述】:
是否可以创建一个类别(扩展),最终返回一个转换为instancetype 的对象?我有一个加载 SKS 文件的类别,但由于此类别适用于 SKNode,因此所有其他子类(如 SKScene 或 SKEmitterNode 等)也将采用它。
所以我只想避免总是从SKNode 转换为instancetype。是否可以将返回类型更改为instancetype 并确保编译器对返回值感到满意?
我想我可以使用-> Self 作为返回类型,但是我不知道如何将scene 转换为instancetype,所以这个东西会编译..
例如:
SKEmitterNode.unarchiveFromFile("Blah") 将返回 SKEmitterNode 的实例
extension SKNode {
class func unarchiveFromFile(file: String) -> SKNode {
let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks")
var sceneData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil)
let unarchiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
unarchiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = unarchiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as SKNode
unarchiver.finishDecoding()
return scene
}
}
【问题讨论】:
-
你能把
-> SKNode改成-> Self和as SKNode改成as Self吗? -
我可以在定义中将 SKNode 更改为 Self,但最后我不能将
scene转换为 Self。您可能对 objc 中的 instancetype 有同样的问题 :) -
对;在 Objective-C 中,您可以在类方法中使用
self,或在实例方法中使用[self class]。
标签: swift