4
對於優化級別快速的一些原因,我的比較方法返回額外的3個元素。這是我的代碼問題,還是Swift 2.0中的錯誤? XCode 7.0和XCode 7.1(2個不同的Mac)出現問題。優化級別影響比較枚舉
func ==(lhs: ViewController.ItemType, rhs: ViewController.ItemType) -> Bool {
// For some reasons for different types e.g. .CType and .AType it returns true
switch(lhs, rhs) {
case (.AType, .AType):
return true
case (let .BType(type1), let .BType(type2)):
return type1 == type2
case (.CType,.CType):
return true
case (.DType, .DType):
return true
case (.EType,.EType):
return true
default:
return false
}
}
class ViewController: UIViewController {
enum ItemType {
case AType
case BType(Int)
case CType
case DType
case EType
}
override func viewDidLoad() {
super.viewDidLoad()
let array:[ItemType] = [.AType, .BType(10), .CType, .DType, .EType]
let array2 = array.filter { (itemType:ItemType) -> Bool in
return itemType == .CType
}
// Prints 1 on [-ONone] optimization and 4 for [-OFast] optimization.
print("Items \(array2.count):\n\(array2)")
}
}
你更新到Xcode 7.1嗎? – matt
它在不同的XCode版本上進行了測試,結果相同。 – Szu
我問,因爲它看起來與此相關:http://stackoverflow.com/questions/32533909/accessor-gives-the-wrong-value-in-swift-1-2-2-0-release-build-only它很可能是這個bug的一部分仍然沒有修復。枚舉以高度優化的方式存儲,這可能有副作用。 – matt