SWIFT 3换算,导致(LLDB)错误`EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子码)= 0x0`
问题描述:
转换我的代码为SWIFT 3之后,我的一个错误:SWIFT 3换算,导致(LLDB)错误`EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子码)= 0x0`
noteObjects.sort (comparator: { (first : AnyObject, second : AnyObject) -> ComparisonResult in
if let f : String = (first as! RChannels).name! {
let s : String = (second as! RChannels).name!
return f.compare(s)
}
} as! (Any, Any) -> ComparisonResult) // error here
此行as! (Any, Any) -> ComparisonResult)
是给我(lldb)没有任何其他描述的错误,任何人都可以解释这里有什么问题?和转换之前是这样的:
noteObjects.sortUsingComparator { (first : AnyObject, second : AnyObject) -> NSComparisonResult in
if let f : String = (first as! RChannels).name! {
let s : String = (second as! RChannels).name!
return f.compare(s)
}
}
noteObjects
是NSMutableArray的
答
摆脱as! (Any, Any) -> ComparisonResult
和两个参数更改为Any
,而不是AnyObject
。
noteObjects.sort(comparator: { (first : Any, second : Any) -> ComparisonResult in
if let f : String = (first as! RChannels).name! {
let s : String = (second as! RChannels).name!
return f.compare(s)
}
})
但这仍然有一些问题。您没有每个代码路径的return
值,并且您没有正确处理可选项。下面会更好:
noteObjects.sort(comparator: { (first : Any, second : Any) -> ComparisonResult in
if let f = (first as! RChannels).name, let s = (second as! RChannels).name {
return f.compare(s)
} else {
return .orderedSame
}
})
为什么这个笨重的比较和'NSMutableArray'?本机Swift数组类型和排序功能效率更高。 – vadian