APAddressBOOK出错:"致命错误:数组索引超出范围"

时间:2015-06-11 13:49:17

标签: arrays swift addressbook

每次我在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 " "
}

有什么线索在这里发生了什么?

1 个答案:

答案 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 { 
    // ...
}