今天早些时候在Swift中使用泛型时遇到了一个有趣的bug.我想出了一个解决方案,但我想知道是否有人可以回答为什么编译器没有捕获这样的东西.让我从一段代码开始.
func doSomething<T>(with array: [T]) {
type(of: array) // Optional<Array<Int>>
array is [Int] // true
array is [String] // true
}
var arrayOfInts: [Int] = []
doSomething(with: arrayOfInts)
Run Code Online (Sandbox Code Playgroud)
见第4行.为什么这样true?我错过了什么吗?难道编译器不应该足够聪明地弄清楚这不是一个Strings 数组吗?这最终导致了一个错误,其中由于假定空数组的类型错误而导致值设置不正确.
就解决方案而言,我选择了以下内容:
if type(of: array).Element.self == Model.self
Run Code Online (Sandbox Code Playgroud)
实际上它与通用无关.如果类型是数组,任何空数组都会回答is问题true:
[Int]() is [String] // true
[1] is [String] // false
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪; 提交一个错误.
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |