import Foundation
for i in 1 ... n {
let entry = readLine()!.characters.split(" ").map(String.init)
let name = entry[0]
let phone = Int(entry[1])!
phoneBook[name] = phone``
}
//有人可以解释这段代码吗?
答案 0 :(得分:1)
我假设你知道代码中除了这一行之外的其他所有内容:
let entry = readLine()!.characters.split(" ").map(String.init)
readLine()
读取用户输入并返回它。让我们说用户输入是
Sweeper 12345678
使用.characters.split(" ")
,我们使用分隔符拆分输入。什么是这个分隔符?空间("")!现在输入分为两个 - " Sweeper"和" 12345678"。
我们希望两个分割部分是字符串,对吗?字符串更容易操作。目前,拆分部分存储在String.CharacterView.SubSequence
的数组中。我们希望将每个String.CharacterView.SubSequence
转换为字符串。这就是我们使用map
的原因。 map
将某个函数应用于集合中的所有内容。所以
.map(String.init)
就像
// this is for demonstration purposes only, not real code
for x in readLine()!.characters.split(" ") {
String.init(x)
}
我们现在已将整个集合转换为字符串!
答案 1 :(得分:0)
您的代码中有错误替换如下:
let entry = readLine()!.characters.split(separator: " ").map(String.init)
上述代码的替代方法是:
let entry = readLine()!.components(separatedBy: " ")
示例:
var str = "Hello, playground"
let entry = str.characters.split(separator: " ").map(String.init)
print(entry)
现在characters.split
使用您在上面的情况“”(空格)中给出的分隔符拆分字符。所以它会生成一个字符数组。您需要将其用作字符串,以便按String
将字符映射到map()
类型。