2016-10-11 166 views
0

如下检查泛型类型是

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

我想知道我怎么能限制吨至是一个函数的类型,可以编写代码,我已经定义了一个泛型类斯威夫特函数类型值()在A类

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

@Hamish它确实如此,但他想强制“任何”为“() - >()”如果我没有错误 –

+2

这是有点不清楚你问的。如果你能限制'T',以便它只能被函数类型满足(你不能AFAIK) - 那么你就不能在你的类中说'value?()',因为你不会不知道'T'有多少个参数,或者它们是什么类型,也不知道返回类型。如果你只是想让'value'接受'() - >()'函数,那么我不明白为什么你需要首先让你的类是通用的 - 只需键入'(value)'(() - > ))?'。 – Hamish

+1

我也不明白这个问题。你上面写的代码是完全有效的Swift(':Any'是多余的,但不会伤害任何东西)。你遇到什么问题? –

回答

0

参照Apple's Documentation

通用代码可以编写灵活,可重复使用的˚F和 类型,可以与任何类型一起使用,服从您要求定义的 。

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

就你而言,可能这是如何使用它们的不正确方法。你可能想使更多的简单:

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 

希望这有助于。