我正在尝试创建一个非常简单的字典,将字符串映射到Swift中的字符串数组.代码如下所示:
class FirstViewController: UIViewController {
var characters:[String] = []
var adjacency = [String : [String]?]()
override func viewDidLoad() {
super.viewDidLoad()
characters = loadCharacters()
adjacency = loadAdjacency()
var character:String = characters[0]
var adj:[String] = adjacency[character] // This line gives the first compiler error
adj = adjacency["a"] // This line gives the second compiler error
println(adj)
}
func loadCharacters() -> [String] {
return ["a", "b", "c"]
}
func loadAdjacency() -> [String : [String]?] {
return ["a": ["a", "b", "c"], "b": ["b", "c", "d"], "c": ["c", "d", "e"]]
}
}
Run Code Online (Sandbox Code Playgroud)
第一个编译器错误是:
'String' is not convertible to 'DictionaryIndex<String, [(String)]?>'
第二个编译器错误是:
'(String, [(String)]?)' is not convertible to '[String]'
据我所知,这两行应该是等效和正确的 - 我从字典查找中使用字符串作为键来获取字符串数组.我哪里错了?
如果我按如下方式编写它,代码将编译并正确运行:
class SecondViewController: UIViewController {
var keyArray:[String] = []
var dict = [String : [String]?]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
keyArray = ["a", "b", "c"]
dict = ["a": ["a", "b", "c"], "b": ["b", "c", "d"], "c": ["c", "d", "e"]]
println(dict[keyArray[1]])
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我正在使用Xcode Version 6.1(6A1052d),而我正在运行OSX 10.9.4.我即将升级到优胜美地,以防万一我的设置发生了一些奇怪的事情,但我想我只是遗漏了一些明显的东西.
错误消息在这里不是很有用,它根本不涉及实际问题....
解决方案1:
var adj/*:[String]??*/ = adjacency[character] // adj is Optional<Optional<[String]>>
adj = adjacency["a"]
println(adj) // Optional(Optional(["a", "b", "c"]))
Run Code Online (Sandbox Code Playgroud)
解决方案2:
var adj/*:[String]*/ = adjacency[character]!! // adj is [String]
adj = adjacency["a"]!!
println(adj) // [a, b, c]
Run Code Online (Sandbox Code Playgroud)
解决方案3 - 安全的方式:
if let adj = adjacency[character] { // adj is Optional<String[]>
if let adj2 = adj { // adj2 is String[]
println(adj2)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
753 次 |
| 最近记录: |