gpt4 book ai didi

swift - 通过 map() 将 String 转换为 Int

转载 作者:行者123 更新时间:2023-11-28 14:52:01 26 4
gpt4 key购买 nike

我有一个输入(字符串):"1 * 2 + 34 - 5",我想将其拆分为数组,然后将“可转换”元素转换为整数。我的代码如下所示:

let arr: [Any] = readLine()!.split(separator: " ").map {Int($0) != nil ? Int($0) : $0}

拆分不是问题,但我不知道为什么映射不能正常工作。我收到错误:

error: cannot invoke initializer for type 'Int' with an argument list of type '((AnySequence<String.Element>))'
note: overloads for 'Int' exist with these partially matching parameter lists: (Float), (Double), (Float80), (Int64), (Word), (NSNumber), (CGFloat)

我尝试用另一种方式做同样的事情,初始化新数组:

let arr = readLine()!.split(separator: " ")
let newArray: [Any] = arr.map {Int($0) != nil ? Int($0) : $0}

但它也会抛出一个错误:

error: 'map' produces '[T]', not the expected contextual result type '[Any]'

令我惊讶的是,当我尝试用 for 循环做同样的事情时,它完美地工作:

let arr = readLine()!.split(separator: " ")
var newArray = [Any]()
for x in arr
{
if Int(x) != nil {newArray.append(Int(x)!)}
else {newArray.append(x)}
}
print(newArray)

输出:[1, "*", 2, "+", 34, "-", 5]

谁能给我解释一下这是怎么回事?我的意思是,如果所有 3 个代码都做同样的事情,那么为什么只有“for 循环”可以正常工作?

最佳答案

您需要指定 map block 的返回类型是 Any 而不是编译器推断的类型 (Int),例如

let fullString = "1 * 2 + 34 - 5"
let elements = fullString
.components(separatedBy: " ")
.map { Int($0) ?? $0 as Any}

关于swift - 通过 map() 将 String 转换为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49783447/

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