XCode 6.1可能的索引错误?

时间:2014-10-24 21:46:19

标签: ios xcode swift

我试图在操场上创建一个复杂的Array,方法如下:

import UIKit

let demoData = [
    [
        "name":"Mr Bean",
        "number": "012345678",
        "address": "4 D. Street",
        "dob": "21-9-1970",
        "gender": "male",
        "docs": [
            "alerts":["jt_alert_1.jpg", "jt_alert_2.jpg"],
            "notes":["jt_notes_1.png", "jt_notes_2.jpg", "jt_notes_3.jpg", "jt_notes_4.jpg"],
            "correspondence": [],
            "investigations": [],
            "operationsheets": [],
            "treatmentcharts": []
        ]
    ],
    [
        "name":"Jenny Thomas",
        "number": "012345679",
        "address": "5 D. Street",
        "dob": "22-9-1970",
        "gender": "female",
        "docs": [
            "alerts":[],
            "notes":[],
            "correspondence": [],
            "investigations": [],
            "operationsheets": [],
            "treatmentcharts": []
        ]
    ]
];

let notes: AnyObject? = demoData[0]["docs"]!["notes"]!
let notePics = notes as Array<String>
notePics[0]

右下角的纺车始终保持旋转状态。 当我创建一个新的swift项目时,相同的代码冻结了所有内容,而XCode正在编制索引

还有其他人有同样的问题吗?如果是,任何解决方案?

提前致谢

1 个答案:

答案 0 :(得分:0)

您的数据非常复杂,因此Swift很难弄清楚您在做什么。给编译器一个关于demoData

结构的提示
let demoData:[[String:AnyObject]] = [
   ...

一切都会好的。

您可能还希望在解压缩结构时更明确地了解您希望找到的内容:

if let docdict = demoData[0]["docs"] as? [String:AnyObject] {
    if let notePics = docdict["notes"] as? [String] {
        println(notePics[0])
    }
}

可选绑定if let)与条件强制转换as?)相结合,为您的程序提供了额外的安全性。如果你对其中一个键错了,或者你对值的数据类型有误,那么这将永远不会进入内部块。如果您使用强制解包!),如果密钥不在您的字典中,您的程序将崩溃。同样,如果您将值(使用as)转换为不属于的类型,则程序将崩溃。