当前位置: 首页 > 面试题库 >

Swift泛型问题

董高朗
2023-03-14
问题内容

现在,我希望能够查看Arrayso中是否包含对象:

func isIncluded<U:Comparable>(isIncluded : U) -> Bool
{
    for item in self
    {
        if (item == isIncluded)
        {
            return true
        }
    }

    return false
}

如果您发现此html" target="_blank">功能属于Array扩展名。问题是如果将其添加到此:

extension Array{

}

我收到以下错误:

找不到’==’的重载,该重载接受提供的参数

在此处输入图片说明

我了解我可能需要告诉什么样的对象应该在里面,Array例如:T[] <T.GeneratorType.Element: Comparable>。但这还不起作用:

括号中的语句块是未使用的闭包
非标称类型’T []’无法
扩展

在此处输入图片说明


问题答案:

使用Swift时,我们需要考虑是否有一个 函数 可以解决问题-在类的方法之外。

就像我们这里的情况一样:

contains(theArray, theItem)

您可以在操场上尝试:

let a = [1, 2, 3, 4, 5]
contains(a, 3)
contains(a, 6)

通过cmd单击Swift符号(例如 Array
),然后在该文件中四处查看,我发现了很多这些函数(该文件似乎是包含Swift通用类和函数的所有声明的全局文件)。

这是一个小扩展,它将向所有数组添加“ contains”方法:

extension Array {
    func contains<T: Equatable>(item: T) -> Bool {
        for i in self {
            if item == (i as T) { return true }
        }
        return false
    }
}


 类似资料:
  • Swift 4语言提供了泛型()功能来编写灵活且可重用的函数和类型。 泛型用于避免重复并提供抽象。 Swift 4标准库使用泛型代码构建。 Swift 4中的数组和字典类型属于泛型集合。 使用数组和字典,数组可定义为保存值和值或任何其他类型。 示例代码 当使用playground运行上述程序时,得到以下结果 - 泛型函数:类型参数 泛型函数可用于访问任何数据类型,如或。 当使用playground

  • Swift 提供了泛型让你写出灵活且可重用的函数和类型。 Swift 标准库是通过泛型代码构建出来的。 Swift 的数组和字典类型都是泛型集。 你可以创建一个Int数组,也可创建一个String数组,或者甚至于可以是任何其他 Swift 的类型数据数组。 以下实例是一个非泛型函数 exchange 用来交换两个 Int 值: 实例// 定义一个交换两个变量的函数 func swapTwoInts

  • 问题内容: 我有一个关于Swift中泛型的快速问题。问题是我试图存储一个以泛型为参数的变量,但是无法将其强制转换为它所限制的类型。最好在一个简短的示例中进行解释: 上面的代码产生错误: 因为T被限制为Foo的子类,它 不 应该 永远不会 失败吗?我一定会误解泛型在Swift中的工作方式,任何指导或帮助将不胜感激! 问题答案: Swift泛型不是协变的。就是说,错误确切说明了什么:即使是,您也无法自

  • 问题内容: 我正在编写一些Swift代码,其中有一个包含通用类型的数组: 稍后在我的代码中,我需要确定存储在数组中的类型。我尝试使用文档中描述的类型转换技术(尽管泛型没有使用过)。 上面的switch语句在编译时导致以下错误: 发出IR SIL功能@ _TFC19Adder_Example Mac6Matrix9transposeUS 7ElementfGS0_Q__FT_GSqGS0_Q___以

  • 问题内容: 我正在尝试基于指定的泛型类型进行强制转换和/或生成一个变量。我知道并没有快速的类型擦除,但是除了泛型的指定条件(例如符合基类)外,泛型似乎并没有保留类型。看来我可以强制转换或初始化的只是基类。更奇怪的是,当我在调试器中时,泛型似乎对正确的类具有RawPointer,甚至变量看起来都像是正确的类型: 编辑: 从Xcode 6.1开始,这仍然是一个问题(简化的代码由Gregory Higl