我有以下代码崩溃。
class PersonFactory {
class var build: PersonInterface {
get {
return Person()
}
}
}
class Person: PersonInterface {
var age: Int = 0
func say(message: String) {
print(message)
}
}
protocol PersonInterface: class {
var age: Int { get set }
func say(message: String)
}
当我从view controller:
运行以下行时崩溃了PersonFactory.build.say("hello")
在以下行EXC_BAD_ACCESS
上与var age: Int = 0
崩溃。问题出现在Xcode 7 beta 4(7A165t)中。
请注意代码不会在Playground中崩溃,只有从应用程序调用时才会崩溃。以下是演示应用:https://github.com/exchangegroup/ProtocolCrashDemo
注意:定义PersonFactory,Person和PersonInterface的代码应位于单独的文件中,以免崩溃。
看起来像Swift 2.0的错误?我向Apple提交了一份错误报告。
此问题已在Xcode 7.0 beta 5中修复。
答案 0 :(得分:2)
你可以通过这样做来避免这种崩溃:
import Foundation
class PersonFactory<T: PersonInterface> {
class var build: T {
return T()
}
}
class Person: PersonInterface {
var age: Int
required init() {
age = 0
}
func say(message: String) {
print(message)
}
}
protocol PersonInterface {
init()
var age: Int { get set }
func say(message: String)
}
let person: Person = PersonFactory.build
person.say("hello")
答案 1 :(得分:1)
最有可能的错误,因为我正在使用Xcode 6.3.2而且看起来很好。