gpt4 book ai didi

arrays - 映射后可选

转载 作者:行者123 更新时间:2023-11-30 11:39:29 25 4
gpt4 key购买 nike

我有一个简单的代码,我尝试将数字拆分为数字:

for n in 10...12
{
let numberIntoString = String(n)
let splitNumber = Array(numberIntoString)
let charIntoString = splitNumber.map {String($0)}
let numberIntoInteger = charIntoString.map {Int($0)}

print(numberIntoInteger)
}

输出是:

[Optional(1), Optional(0)]
[Optional(1), Optional(1)]
[Optional(1), Optional(2)]

我做了一些关于“可选”的研究,发现这个术语与包装/展开值(value)有关,但为了充分理解这一点,我需要有人用我自己的代码向我解释这一点。所以,我的问题是:为什么可选值出现在我的代码中以及如何摆脱这个意外的输出?另外,我想知道有什么方法可以“更好”地编写这段代码(即更具可读性)?

最佳答案

线路

let numberIntoInteger = charIntoString.map {Int($0)}

产生一个可选的。这是因为如果提供的 String 不是,则将 String 转换为 Int(在 Int($0))可能会失败一个号码。例如,"abcde" 不是数字,无法转换为 Int。因此,将返回nil。这完全是预料之中的,正如你所说,并不意外,Int 初始化器就是这样设计的。

您可以通过隐式展开来消除可选值,如下所示:

let numberIntoInteger = charIntoString.map {Int($0)!}

注意初始化器后面的!。这将删除可选的。但是,如果该值确实为nil,您的程序将会崩溃。在您的情况下,这种情况永远不会发生,因为 n 应该只是一个 Int

您还有另一种选择:使用 flatMap 请注意,这在 Xcode 9.3 Beta 中已弃用,请改用 compactMap

let numberIntoInteger = charIntoString.flatMap {Int($0)}

关于arrays - 映射后可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49405436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com