Swift中的空数组和泛型有什么用?

问题描述 投票:5回答:1

今天早些时候在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)

见第4行。为什么true?我错过了什么吗?难道编译器不应该足够聪明地弄清楚这不是Strings的数组吗?这最终导致了一个错误,其中由于假定空数组的类型错误而导致值设置不正确。

就解决方案而言,我选择了以下内容:

if type(of: array).Element.self == Model.self
swift generics
1个回答
6
投票

实际上它与通用无关。如果类型是数组,任何空数组都会用is回答true问题:

[Int]() is [String] // true
[1] is [String] // false

这看起来很奇怪; file a bug

© www.soinside.com 2019 - 2024. All rights reserved.