我有一个数组接收Int
类型的值,我想在对这些值执行一些转换之后返回String
的数组。无法转换类型'Array <String>?'的值指定类型'Array <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部分
我想使上述功能,其中,I取字符串类型的数组,并转换为Int的阵列时的字符的每个串的计数大于的反向0.但是,我似乎无法做到这一点,因为类似于_IntegerType的唯一协议是_CocoaStringType。
有几件事情:
- 我不知道我是否应该使用一种以下划线 前缀
- _CocoaStringType不会从任何 允许string.characters.count继承使用。
如果您想以另一种方式将字符串长度非空时从Int转换为字符串,您将使用哪种类型?字符串是一个结构,无法找到相应的协议,类似于_IntegerType。 –
你的意思是从字符串到int? – Lukas
我在回答中添加了 – Lukas