簡體   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