繁体   English   中英

检查泛型类型是否是 Swift 中的函数类型

[英]Check if the generic type is a function type in Swift

我已经定义了一个通用类如下

class A<T:Any>{
   var value:T? 
}

我想知道如何将 T 限制为函数类型,并且可以在 A 类中编写类似 value() 的代码。

let a = A<()->()>()

参考苹果的文档

通用代码使您能够根据您定义的要求编写灵活、可重用的函数和类型,这些函数和类型可以与任何类型一起使用。

这是使用泛型的主要目的。

就您而言,这可能是使用它们的不正确方式。 您可能想要更简单:

typealias funcion = ()->()

class A {
    private var value:funcion?

    init(value: @escaping funcion) {
        self.value = value
    }

    func doSomething() {
        print("do something 01")

        if let iplementedValue = value {
            iplementedValue()
        }

        print("do something 02")
    }
}

实例化:

let aObject = A(value: {
    print("I want to this in the middle of my \"doSomething\"")
})

aObject.doSomething()

输出应如下所示:

do somthing 01
I want to this in the middle of my "doSomething"
do somthing 02

希望有所帮助。

我遇到了类似的问题,我最终解决了这样的问题:

首先,我定义了一个泛型类型,表示一个接受单个参数和返回值的函数:

typealias Monad<A, R> = (A) -> (R)

然后我定义了我的类来为输入类型采用一个泛型类型参数。 就我而言,传递的每个函数都将返回 void,因此我不需要两个类型参数。

class HoldsMyCallback<A> {
    let callback: Monad<A, Void>

    init(callback: @escaping Monad<A, Void>) {
        self.callback = callback
    }
}

...

let funcKoozie = HoldsMyCallback<Int> {
    print("keep my \($0) function cold")
}

funcKoozie.callback(1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM