我正在尝试创建一个函数,它接受嵌套的对象数组,如[1,[2,[3,4],[5,6]]],并返回像这样的单个数组中的值[1,2,3,4 ,5,6].我想为通用对象做这些,所以我创建了一个方法
func getNestedArray<T>(array:[Any])->[T]?{
var nestedArray:[T] = []
for object in array{
if object is [Any]{
let neededArray = getNestedArray(array: object as! [Any])
nestedArray.append(contentsOf: neededArray)
}
else if object is T{
nestedArray.append(object as! T)
}
else{
print("send proper array dumbass")
return nil
}
}
return nestedArray
}
Run Code Online (Sandbox Code Playgroud)
因此,如果对象属于TI类型只是追加它或者它是类型数组我再次调用该函数并递归应该给我正确的结果但我在调用此函数时收到错误.我究竟做错了什么?我只是将'Any'类型的对象传递为'[Any]'.为什么会抛出这个错误?
你没有告诉编译器什么类型neededArray应该是什么.编译器抱怨是很自然的.从背景来看,我认为你想neededArray成为一个阵容T.所以明确说出类型:
let neededArray: [T] = getNestedArray(array: object as! [Any])
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,因为你还没有打开可选项.好吧,如果getNestedArray返回nil表示数组首先是无效的,我们也应该返回nil:
guard let neededArray: [T] = getNestedArray(array: object as! [Any]) else { return nil }
Run Code Online (Sandbox Code Playgroud)
请记住在使用该方法时指定类型!
let result: [Int] = getNestedArray(array: [1, [2, [3, [4]]]])!
Run Code Online (Sandbox Code Playgroud)