可选出现在结果中
Optional Appears in the result
我目前正在学习swift,我写了以下愚蠢的代码,但结果显示如下:"The monster is Optional("sihso") when the hero is at level 2"。我不知道为什么那里有可选这个词。
var level = 2
var mons = [1 : "SHhi", 2 : "sihso", 3 : "shssh"]
var monster = mons [level]
print("The monster is \(monster)" + " when the hero is at level \(level)")
单词 Optional
在那里是因为 monster
具有隐式类型 String?
,一个可选的字符串。
当查询字典中特定键的值时,它们 return 是可选类型。给定键可能存在也可能不存在值。如果不存在,则 returns nil
.
所以,我们必须检查以确保我们得到了一个值。
let level = 2
let mons = [1 : "SHhi", 2 : "sihso", 3 : "shssh"]
if let monster = mons[level] {
print("The monster is \(monster) when the hero is at level \(level)")
}
请注意,if mons
没有我们传递给它的密钥的值,根本不会打印任何内容(这很可能是我们想要)。
如果我们想以任何一种方式打印,最好的方法可能是使用 nil
-合并运算符 (??
):
let level = 2
let mons = [1 : "SHhi", 2 : "sihso", 3 : "shssh"]
var monster = mons[level] ?? "unknown"
print("The monster is \(monster) when the hero is at level \(level)")
现在,任何时候 mons[level]
都会 return nil
,monster
将等于 "unknown"
,并且每次都会打印消息(永远不要用它打印 Optional()
)。
假设您的值数组由框而不是值表示。你怎么可能知道任何盒子是否真的包含某些东西,即一个值,或者没有?您必须打开并打开包装 - 因为它是一个包装精美的 :) - 盒子才能知道里面是否有东西。好吧,Optional
可以达到这个目的。
如果你真的想摆脱盒子并使用值,你应该使用 ?
或 !
解开 Optional
在您的特定情况下,您可以添加一个额外的检查以仅在展开的值不同于 nil 时打印出该消息,或者您可以使用 !
并寻求不太安全的解决方案:print("The monster is \(monster!) when the hero is at level \(level)")
因此如果展开的值为 nil
.
则引发运行时异常
我注意到 nhgrif 没有指出不在代码中添加 if
分支也可以做到 print("The monster is \(monster?) when the hero is at level \(level)")
。这样做基本上最终会产生与使用 Objective C
时相同的行为
我目前正在学习swift,我写了以下愚蠢的代码,但结果显示如下:"The monster is Optional("sihso") when the hero is at level 2"。我不知道为什么那里有可选这个词。
var level = 2
var mons = [1 : "SHhi", 2 : "sihso", 3 : "shssh"]
var monster = mons [level]
print("The monster is \(monster)" + " when the hero is at level \(level)")
单词 Optional
在那里是因为 monster
具有隐式类型 String?
,一个可选的字符串。
当查询字典中特定键的值时,它们 return 是可选类型。给定键可能存在也可能不存在值。如果不存在,则 returns nil
.
所以,我们必须检查以确保我们得到了一个值。
let level = 2
let mons = [1 : "SHhi", 2 : "sihso", 3 : "shssh"]
if let monster = mons[level] {
print("The monster is \(monster) when the hero is at level \(level)")
}
请注意,if mons
没有我们传递给它的密钥的值,根本不会打印任何内容(这很可能是我们想要)。
如果我们想以任何一种方式打印,最好的方法可能是使用 nil
-合并运算符 (??
):
let level = 2
let mons = [1 : "SHhi", 2 : "sihso", 3 : "shssh"]
var monster = mons[level] ?? "unknown"
print("The monster is \(monster) when the hero is at level \(level)")
现在,任何时候 mons[level]
都会 return nil
,monster
将等于 "unknown"
,并且每次都会打印消息(永远不要用它打印 Optional()
)。
假设您的值数组由框而不是值表示。你怎么可能知道任何盒子是否真的包含某些东西,即一个值,或者没有?您必须打开并打开包装 - 因为它是一个包装精美的 :) - 盒子才能知道里面是否有东西。好吧,Optional
可以达到这个目的。
如果你真的想摆脱盒子并使用值,你应该使用 ?
或 !
在您的特定情况下,您可以添加一个额外的检查以仅在展开的值不同于 nil 时打印出该消息,或者您可以使用 !
并寻求不太安全的解决方案:print("The monster is \(monster!) when the hero is at level \(level)")
因此如果展开的值为 nil
.
我注意到 nhgrif 没有指出不在代码中添加 if
分支也可以做到 print("The monster is \(monster?) when the hero is at level \(level)")
。这样做基本上最终会产生与使用 Objective C