首页 > 解决方案 > 避免字符串在 swift 中被视为可选

问题描述

我有一个函数,其中字符串值是根据字典中的值定义的。如果找不到字典中的值,我将其设置为静态字符串。字符串是常量(let):

let dict = [ 1: "a", 
             2: "b" ]

func x() {
    let index = someFunctionReturnsInt()
    let str = (nil != dict[index]) ? dict[index] : "N/A"

所以字符串不可能是nil。但是,当我尝试使用 时str,Swift 仍然认为它是可选的。例如:

    // still inside the same function
    os_log("Str is %@", str)

将返回编译器错误:

可选类型“字符串?”的值 必须解包为“字符串”类型的值

问题是,我多次使用此功能,str ?? "N/A"每次添加都没有意义。Force-unwrap withstr!似乎有点矫枉过正:这个字符串对应用程序并不重要,所以我认为如果它丢失则中止执行没有任何意义。

那么 force-unwrap 是唯一的解决方案,还是有更好的方法将字符串定义为非可选且“永远不会为零”?

标签: swiftdictionaryoptional

解决方案


问题是它dict[index]仍然返回一个可选的,所以str必须是一个可选的。有两种方法可以修复它

如果它不是 nil,则可以使用 nil 合并运算符使用dict[index],否则使用“N/A”

let str = dict[index] ?? "N/A"

另一种选择是使用字典默认值下标

let str = dict[index, default: "N/A"]

推荐阅读