簡體   English   中英

類名作為swift中的函數參數

[英]Class name as a function parameter in swift

有沒有辦法引用放在另一個類中的函數內部的類?

簡化,第一類看起來像這樣:

class ClassOne: UITableViewController, NSFetchedResultsControllerDelegate {

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        Client().fetchFunction(ClassOne)

    }

    func otherFunction(){
        ...
    }

}

第二類看起來像這樣:

public class ClassTwo: NSManagedObject, NSFetchedResultsControllerDelegate {

    func fetchFunction(originClass: ???.Type){

        originClass.otherFunction()

    }

}

我解決問題的嘗試不起作用,由“???”表示 放在上面。 我為“???”輸入的所有類型 導致錯誤消息。

任何想法如何解決問題? 我也嘗試在Swift中跟隨Class作為函數參數,但它似乎對我的情況不起作用。

作為參數的類名不是一個好主意,至少在你的情況下不是這樣,並且你可以通過更干凈的方法獲得類似的結果,而不會失去Swift所具有的類型安全性。

您可以通過添加協議來更清楚地實現此目的:

protocol MyProtocol() {
    public func otherFunction()
}

可以在ClassTwo

public class ClassTwo: NSManagedObject, NSFetchedResultsControllerDelegate {

    func fetchFunction(obj: MyProtocol){
        obj.otherFunction()
    }
}

然后,您可以向ClassOne添加符合該協議的擴展:

extension ClassOne: MyProtocol {
    public func otherFunction() {
        // do your magic
    }
}

您可以將此技術應用於需要獲取支持的所有類。

您可以使用協議和通用功能的組合來執行您想要的操作。 這樣的事情應該有效:

protocol SomeProtocol {
    static func myFunc()
}

class ClassOne: SomeProtocol {
    class func myFunc() { print("Hello") }
}

class ClassTwo {

    func test<T: SomeProtocol>(type: T.Type) {
        T.myFunc()
    }

}

ClassTwo().test(ClassOne.self)   // Prints "Hello"

像其他一些回答者一樣,我很難理解你想要做什么 - 我假設你試圖調用一個類函數,否則就沒有必要傳遞類型 - 你只需傳遞一個實例對象。 如果你真的想傳遞一個實例,那么修改代碼如下:

protocol SomeProtocol {
    func myFunc()
}

class ClassOne: SomeProtocol {
    func myFunc() { print("Hello") }
}

class ClassTwo {

    func test<T: SomeProtocol>(object: T) {
        object.myFunc()
    }

}

ClassTwo().test(ClassOne())   // Prints "Hello"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM