ios - 如何在 Swift 中创建和访问 NSDictionary

标签 ios arrays dictionary swift

我正忙于转换为 Swift,并试图弄清楚如何在 Swift 中执行以下操作

NSArray arrayOfStrings1 = {@"Substring1", @"Substring2", nil};

Dictionary dict = {@"MainString1", arrayOfStrings1};

所以在 Swift 中我有以下内容:

var dictionary = [String: Array<String>]()  // is this correct ??
var array: [String] = ["Substring1", "Substring2"]


dictionary["MainString1"] = ["Substring1.1", "Substring1.2"]
dictionary["MainString2"] = ["Substring2.1", "Substring2.2"]

现在为了访问我使用的数组

let array = dictionary["MainString1"]

let item0 = array[0]

但这会失败并出现编译器错误,这似乎表明该数组实际上是一个字符串而不是字符串数组。

我在这里缺少什么?

最佳答案

问题实际上是 Swift 中 Dictionary 的下标查找返回一个可选值:

enter image description here

这是一个非常棒的功能 - 你不能保证你正在寻找的键一定对应于一个值。因此,Swift 确保知道您可能无法从查找中获得值。

这与 Array 的下标行为略有不同,后者始终返回一个值。这是一个语义驱动的决定 - 在语言中,如果没有键,字典查找返回 null 是很常见的 - 但如果您尝试访问不存在的数组索引(因为它超出了范围) ),将会抛出异常。这就是 Swift 保证您将从数组下标返回值的方式:要么获得一个值,要么必须捕获异常。字典稍微宽松一些 - 它们“习惯”不具有您所要求的值。

因此,您可以使用可选绑定(bind)仅在项目实际具有值时才使用该项目,如下所示:

if let theArray = dictionary["MainString1"] {
    let item0 = theArray[0]
} else {
    NSLog("There was no value for key 'MainString1'")
}

关于ios - 如何在 Swift 中创建和访问 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26170399/

相关文章:

iphone - 在iphone中使用sqlcipher解密

android - 如何构建跨平台应用程序

java - 数组包含该值多少次?

c++ - 通过范围变量计算点周围的积分器 x 和 y 坐标

arrays - Array.Reduce 上的类型错误

c++ - std::map 是否通过引用、按值获取分配器或纯粹将其用作类型?

java - 如何使用 map 节省空间

iOS objective-c : Get user selected phone number from CNContactProperty as a string

python - 使用字典查找 DataFrame 变量的值

ios - 服务因中止陷阱 : 6 in react-native IOS 而退出