简单Swift类不编译
我的简单类ClassWithOneArray产生以下错误: Bitcast要求两个操作数都是指针或两者都不是%19= 比特广播i64%18到%objc_对象*!dbg!470 LLVM错误:已断开 找到函数,编译中止!命令 /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift 失败,退出代码为1 然而,我的类ClassWithOneInt却没有。为什么?简单Swift类不编译,swift,xcode6,nscoder,Swift,Xcode6,Nscoder,我的简单类ClassWithOneArray产生以下错误: Bitcast要求两个操作数都是指针或两者都不是%19= 比特广播i64%18到%objc_对象*!dbg!470 LLVM错误:已断开 找到函数,编译中止!命令 /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift 失败,退出代码为1 然而,我的类ClassWithOneInt却没有。为什么?
class ClassWithOneInt {
var myInt = Int()
init(myInt: Int) {
self.myInt = Int()
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(myInt, forKey: "myInt")
}
init(coder aDecoder: NSCoder) {
self.myInt = aDecoder.decodeObjectForKey("myInt") as Int
}
}
class ClassWithOneArray {
var myArray = String[]()
init(myArray: String[]) {
self.myArray = String[]()
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(myArray, forKey: "myArray")
}
init(coder aDecoder: NSCoder) {
self.myArray = aDecoder.decodeObjectForKey("myArray") as String[]
}
}
看起来您的语法与您试图实现的目标有点不符-类似这样的东西应该可以工作:
class ClassWithOneInt {
var myInt: Int
init(myInt: Int) {
self.myInt = myInt
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(myInt, forKey: "myInt")
}
init(coder aDecoder: NSCoder) {
self.myInt = aDecoder.decodeObjectForKey("myInt") as Int
}
}
class ClassWithOneArray {
var myArray: String[]
init(myArray: String[]) {
self.myArray = myArray
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(myArray, forKey: "myArray")
}
init(coder aDecoder: NSCoder) {
self.myArray = aDecoder.decodeObjectForKey("myArray") as String[]
}
}
正如我在评论中指出的,您的示例在beta 2上似乎编译得很好,尽管出于以下几个原因,它仍然不起作用,
encoderWithCoder
要想发挥任何作用,ClassWithOneArray
需要:
@objc(ClassWithOneArray)
class ClassWithOneArray:NSObject, NSCoding {
var myArray: String[]
init(myArray: String[]) {
self.myArray = myArray
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(myArray, forKey: "myArray")
}
init(coder aDecoder: NSCoder) {
self.myArray = aDecoder.decodeObjectForKey("myArray") as String[]
}
}
此外,似乎操场上没有简单的存档测试方法,可能是因为类没有正确注册
let foo = ClassWithOneArray(myArray:["A"])
let data = NSKeyedArchiver.archivedDataWithRootObject(foo)
let unarchiver = NSKeyedUnarchiver(forReadingWithData:data)
unarchiver.setClass(ClassWithOneArray.self, forClassName: "ClassWithOneArray")
let bar = unarchiver.decodeObjectForKey("root") as ClassWithOneArray
根据我的经验,简单地向类声明协议“NSCoding”就可以了。希望这对其他人有所帮助。考虑到编译器正在崩溃,这很明显看起来像是一个编译器错误。好的,谢谢。我将提交一份错误报告。这似乎可以用Beta 2编译器编译。谢谢,但我在构建时仍然会遇到同样的错误,只有在我用一个数组注释掉ClassWithOneArray时才会消失,就像我的代码注释一样,@rjsamson观察到您错误地声明了myArray,他使用的
var myArray:String[]
会更好。谢谢。这在多个层面上帮助了我。