[英]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.