每次我在Swift中处理地址簿(通过cocapods使用APAddressBOOK)时我都会收到这个奇怪的错误,经过一些调试我发现并且空的对象(记录没有电话号码)数组导致此问题,但不知道如何摆脱它。
这是我的代码:
func getPersonsNo(contactno: AnyObject) -> String {
println(contactno) // **when the object is empty I get this "[]"**
if let numberRaw = contactno.phones?[0] as? String { // at this statement the program crashes with a fatal error
println(numberRaw)
return numberRaw)
}
return " "
}
有什么线索在这里发生了什么?
答案 0 :(得分:0)
Array
的下标不返回可选项以指示索引是否超出数组的范围;相反,您的程序将崩溃,并显示消息“致命错误:数组索引超出范围”。将此代码应用于此:当contactno
为空时,程序将崩溃,因为数组的索引0处没有元素。
解决问题的最简单方法可能是使用first
上的Array
属性。 first
将返回数组中的第一个元素,如果数组为空,则返回nil
。看看如何声明first
:
extension Array {
var first: T? { get }
}
自Swift 2起,first
已成为CollectionType
协议的扩展名:
extension CollectionType {
var first: Self.Generator.Element? { get }
}
你会这样使用它:
if let numberRaw = contactno.phones?.first as? String {
// ...
}