gpt4 book ai didi

swift2 - 无法将类型 'Array?' 的值转换为指定类型 'Array?'

转载 作者:行者123 更新时间:2023-12-02 04:45:53 25 4
gpt4 key购买 nike

我有一个接收 Int 类型值的数组,我想在对值执行一些转换后返回一个 String 数组。

它们看起来像这样:

var ints: Array<Int> = [1, 2, 3, 4]
var strings: Array<String> = Array<String>()

我在每个数组上执行的映射:

func convertToStrings(array: Array<Int>?) -> Array<String>? {
var stringResult: Array<String>? = nil

if let x = array {
stringResult = x.map { "Transformed: \($0)" }
}

return stringResult
}

将它设置为一个全局函数是可行的,但我想将它附加到一个对象上,也许作为对 Array 的扩展。当我这样尝试时:

extension Array {
static func convertToStrings(array: Array<Int>?) -> Array<String>? {
var stringResult: Array<String>? = nil

if let x = array {
stringResult = x.map { "Transformed: \($0)" }
}

return stringResult
}
}

使用这种用法:

var result: Array<String>? = Array.convertToStrings([1, 2])
print("result: \(result)")

我收到这个错误:

error: cannot convert value of type 'Array?' to specified type 'Array?'

我不确定为什么会产生此错误。

将此功能封装到更少的全局域空间并将其附加到更合理的范围的好方法是什么?

编辑:第 2 部分

我想对上面的函数进行反向操作,当每个字符串的字符数大于 0 时,我将一个 String 类型的数组转换为 Int 数组。但是,我似乎做不到这样做是因为唯一类似于 _IntegerType 的协议(protocol)是 _CocoaStringType。

一些事情:

  1. 我不确定我是否应该使用带下划线的类型前缀
  2. _CocoaStringType 不继承自任何允许使用 string.characters.count。

最佳答案

数组适用于所有类型,因此无论数组包含什么,您的扩展都将适用。我建议创建一个扩展符合的协议(protocol),以避免在 [UIView] 数组或 [String] 数组上调用例如这个没有意义的扩展方法。以下符合 _IntegerType 但您也可以使用自己的协议(protocol)

extension Array where Element: _IntegerType {
static func convertToStrings(array: [Element]?) -> [String]?
{
var stringResult: [String]?

if let x = array {
stringResult = x.map { "Transformed: \($0)" }
}

return stringResult
}
}

既然你问了,你可以做相反的事情(如下所示将字符串数组元素转换为 Int

extension Array where Element: StringLiteralConvertible {
static func convertToInt(array: [Element]?) -> [Int]?
{
var intResult: [Int]?
if let x = array {
intResult = x.map{Int("\($0)")!}
}
return intResult
}
}
var r:[Int]? = Array.convertToInt(["1", "4"])
print(r) // this will print "Optional[1, 4]\n"

关于swift2 - 无法将类型 'Array<String>?' 的值转换为指定类型 'Array<String>?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33203881/

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