You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift拆分数字为数位得到Optional值,如何解包获取整数数组?

如何将数字拆分为非可选整数数组?

嘿,这个问题我之前也碰到过!你得到Optional是因为Int(String($0))的返回值是可选类型——毕竟不是所有字符都能转换成有效的整数嘛。不过咱们有几种简单的办法能得到纯整数数组,来看看:

方法一:用compactMap自动解包并过滤nil

这是最安全也最推荐的方式,compactMap会自动把可选值解包,同时过滤掉转换失败的nil(不过在你的场景里,因为是从数字转成的字符串,所以不会有nil,但这个方法依然适用)。

只需要把最后一步的map换成compactMap就行:

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

运行后输出就是:
[1, 0]、[1, 1]、[1, 2]

方法二:强制解包(仅在绝对安全时使用)

因为你的字符串是从数字直接转来的,每个字符肯定都是数字,所以可以放心用!强制解包可选值:

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) 
}

⚠️ 注意:如果你的字符串来源不确定(比如用户输入),千万不要用强制解包,不然遇到非数字字符会直接崩溃!

优化版:简化代码

其实你可以把中间步骤合并,让代码更简洁:

for n in 10...12 {
    let digits = Array(String(n)).compactMap { Int($0) }
    print(digits)
}

这样一行就完成了所有转换,结果和上面一样~

内容的提问来源于stack exchange,提问作者whok mok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:36:52