2016-10-11 165 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 

希望這有助於。