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