我已经定义了一个泛型类,如下所示
class A<T:Any>{
var value:T?
}
我想知道如何将T限制为函数类型,并且可以在类A中编写类似value()的代码。
let a = A<()->()>()
答案 0 :(得分:0)
通用代码使您可以编写灵活,可重用的函数和 可以使用任何类型的类型,具体取决于您的要求 定义
这是使用Generics的主要目的。
在您的情况下,可能,这是如何使用它们的不正确方法。您可能想要更简单:
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
希望有所帮助。
答案 1 :(得分:0)
我遇到了类似的问题,最终像这样解决了它:
首先,我定义了一个泛型类型,表示一个接受单个参数并返回值的函数:
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)