当前位置: 首页 > 面试题库 >

Swift中的两个(或更多)可选

耿永寿
2023-03-14
问题内容

在观看苹果公司有关LLDB调试器的视频时,我发现我找不到解释。他在撰写文章时谈论的是可选值:

var optional: String? = nil; //This is ok, a common optional
var twice_optional: String?? = nil; //What is this and why's this useful??

我打开了一个操场,开始尝试,发现可以写任意?数量的文字,然后用相同数量的拆开它们!。我了解 包装/解包变量
的概念,但是无法想到要包装4、5或6次值的情况。


问题答案:

(已更新为Swift > = 3)

“ Double optionals”可能有用,Swift博客条目“ Optionals Case
Study:valuesForKeys”
描述了一个应用程序

这是一个简化的示例:

let dict : [String : String?] = ["a" : "foo" , "b" : nil]

是具有可选字符串作为值的字典。因此

let val = dict[key]

具有String??aka
类型Optional<Optional<String>>。如果字典中不存在键,则为.none(或nil),.some(x)否则为。在第二种情况下,xString?aka
Optional<String>,可以是.none(或nil)或.some(s)其中s是字符串。

您可以使用嵌套的可选绑定来检查各种情况:

for key in ["a", "b", "c"] {

    let val = dict[key]
    if let x = val {
        if let s = x {
            print("\(key): \(s)")
        } else {
            print("\(key): nil")
        }
    } else {
        print("\(key): not present")
    }

}

输出:

a: foo
b: nil
c: not present

看看在切换语句中使用模式匹配如何实现相同的目标可能会很有启发性:

let val = dict[key]
switch val {
case .some(.some(let s)):
    print("\(key): \(s)")
case .some(.none):
    print("\(key): nil")
case .none:
    print("\(key): not present")
}

或者,将该x?模式用作以下内容的同义词.some(x)

let val = dict[key]
switch val {
case let (s??):
    print("\(key): \(s)")
case let (s?):
    print("\(key): nil")
case nil:
    print("\(key): not present")
}

(我不知道明智的应用程序用于更深层嵌套的可选内容。)



 类似资料:
  • 问题内容: 我有两个排序集,并且想要进行交集,即。 关于效率,是否有比以下更好的方法: 问题答案: 您应该先使用ZCARD检查哪些元素较少,然后克隆并修剪较短的元素。 其次,您将剩下2个剩菜。您可以重复使用同一辅助程序,以加快清除速度。 我还想建议克隆使用DUMP和RESTORE,但是对于排序集的情况,ZUNIONSTORE实际上要快得多。这是一个100万个元素集的时间安排:

  • 问题内容: 我们有两个可选的NSArrays。目的是检查它们是否相等。我的解决方案是 我觉得这太冗长了。它应该以更简洁和易读的方式实现。有谁有更好的解决方案? 问题答案: 这很简单: 正是您想要的。 为什么行得通? 这是比较可选项的运算符 并给出两个操作数是否为,或者两个操作数均为非nil且未包装的操作数相等。 也继承符合,并使用将该方法与进行比较,该方法按on 实现。因此 给出与以下结果相同的结

  • 问题内容: 我想合并两个或多个视频文件(它们可能是两个mp4或两个3gp或任何其他格式)。 问题答案: 您可以使用的最通用的工具是ffmpeg(如上面@Jeremy所述),但是在手机上使用它需要做一些工作。它也是LGPL许可的,其某些编码器(特别是x264)是GPL。 如果您要连接的两个文件都使用类似的编码,并且包含在从MP4派生的文件格式中(例如3GP),那么一个更简单的解决方案是使用纯Java

  • 问题内容: 具体来说,我有两个字符串列表,我想将它们组合成一个字符串,其中每一行是列表中的下两个字符串,以空格分隔: 我想要一个函数Combine_to_lines()返回: 我承认我已经解决了这个问题,所以我将发布答案。但是也许其他人有更好的表现,或者看到我的缺点。 更新 :我在上面简化了我的示例。在我的实际问题中,以更复杂的方式设置行的格式,这要求解压缩从zip()返回的元组。但是对于mhaw

  • 问题内容: 有一个使用一个py文件(模块)构建可执行文件的示例,如下所示,我大约有4个py文件(模块),我想构建应包含所有py文件的可执行文件。 当我们有一个以上的python模块时,如何构建python可执行文件? 这里的例子 如果我有两个文件hello1.py和hello2.py,则此文件具有hello.py? 谢谢 问题答案: 如果您的文件导入了这些文件-和,则此行: 够了。 但是,如果这些

  • 我有一个无法解决的问题。我有一个包含TitleID、TextID、ImageID的新闻表。还有三张表格,标题,文本,图片。我想把它们都放在一个模型里。但当我尝试时,得到的结果就像数组中的数组。但我想要的是: 雄辩的ORM对此的反应如下: 数据库结构 新闻= 头衔= 其他表类似于标题表。