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

标签 swift generics

今天早些时候在 Swift 中使用泛型时遇到了一个有趣的错误。我想出了一个解决方案,但我想知道是否有人可以回答为什么编译器没有捕捉到这样的东西。让我从一段代码开始。

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 是真的?我错过了什么吗?编译器难道不应该聪明到足以弄清楚这不是一个 String 数组吗?这最终导致了一个错误,即由于假定空数组的类型错误而导致值设置不正确。

就解决方案而言,我采用了以下方法:

if type(of: array).Element.self == Model.self

最佳答案

其实跟泛型没有关系。如果类型是数组,任何空数组都会用 true 回答 is 问题:

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

这看起来确实很奇怪; file a bug .

关于swift - Swift 中的空数组和泛型有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47957806/

相关文章:

java - 创建与传递给方法的类型相同的数组

具有未知泛型接口(interface)的 Java 泛型编程

java - 如何将对象从一张 map 放到另一张 map 上?

ios - iOS swift 拖动2个元素

swift - 在基于文档的应用程序中为首选项 Controller 获取 managedObjectContext

c# - 将通用集合转换为字符串列表

swift - 通用 View 生成器无法快速推断类型

ios - Xcode 11 单元测试 : Devices with iOS 12. * 未列出

ios - 呈现小于屏幕尺寸的 View Controller

ios - iBeacons 对 iOS 10.x 中框架的更改