针对通用类型的Swift检查类型

我有一个带有1参数的通用函数,并且想要检查通用类型的传递参数的类型.这样的事情
func generic<T>(parameter: AnyObject) -> Bool {
    if parameter is T {
        return true
    } else {
        return false
    }
}

但是我不知道该怎么称呼

generic<String>("Hello")

给我一个编译器错误:“不能显式地专门化通用函数
通用(“你好”)

你不能告诉一个函数它的通用占位符的类型(与通用结构体不同).它必须从上下文推断它们.其论据.

执行所需的一种方法是添加与类型T相关的另一个参数.而不是传入虚拟值,您可以使用所需类型的元类型:

func generic<T>(parameter: AnyObject,type: T.Type) -> Bool {
    if parameter is T {
        return true
    } else {
        return false
    }
}

let o: AnyObject = "hello"
generic(o,String.self)    // true
generic(o,NSString.self)  // also true
generic(o,Int.self)       // false

但是,我会问你,你认为你在这里实现了什么?你实际上只是做一个功能:

o is String     // true
o is NSString   // true
o is Int        // false

泛型点是一般地对参数进行操作,但是您并没有给出函数任何特定类型的参数来实际执行任何工作(因此无法推断出一个).

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...