gpt4 book ai didi

generics - (Swift 3) 无法推断通用参数 T

转载 作者:行者123 更新时间:2023-12-04 18:01:41 26 4
gpt4 key购买 nike

我正在尝试创建一个函数,它接受像 [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
}

因此,如果对象是 T 类型,我只是附加它,或者如果它是数组类型,我将再次调用该函数并递归地给出正确的结果,但在调用此函数时出现错误。我究竟做错了什么?我只是将“Any”类型对象作为“[Any]”传递。为什么会抛出这个错误?

最佳答案

您没有告诉编译器有关什么类型的任何信息 neededArray应该。编译器提示是很自然的。从上下文来看,我认为你想要neededArray成为 T 的数组.所以明确地说类型:

let neededArray: [T] = getNestedArray(array: object as! [Any])

显然这是行不通的,因为您还没有打开可选项。好吧,如果 getNestedArray返回 nil 意味着数组首先是无效的,我们可能也应该返回 nil:
guard let neededArray: [T] = getNestedArray(array: object as! [Any]) else { return nil }

使用方法时也要记得指定类型!
let result: [Int] = getNestedArray(array: [1, [2, [3, [4]]]])!

关于generics - (Swift 3) 无法推断通用参数 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46265479/

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