我已經以下代碼:強制投,即使協議需要給定類型
import UIKit
protocol Fooable: class where Self: UIViewController {
func foo()
}
class SampleViewController: UIViewController, Fooable {
func foo() {
print("foo")
}
}
let vc1: Fooable = SampleViewController()
let vc2: Fooable = SampleViewController()
// vc1.show(vc2, sender: nil) - error: Value of type 'Fooable' has no member 'show'
// (vc1 as! UIViewController).show(vc2, sender: nil) - error: Cannot convert value of type 'Fooable' to expected argument type 'UIViewController'
(vc1 as! UIViewController).show((vc2 as! UIViewController), sender: nil)
註釋行不編譯。
爲什麼我會被迫投協議類型對象UIViewController
即使Fooable
協議要求,這符合它的類型從UIViewController
繼承?
是的,它工作,因爲'vc1'和'vc2'現在是'SampleViewController'類型。我的帖子顯然是簡化的例子,例如。考慮這些對象是從函數'func buildVC(vcType:VCTypeEnum) - > Fooable'返回的。你可以發佈更多的源代碼嗎? – zgorawski
@zgorawski?沒有更多細節,將很難幫助你。 – jbouaziz
也沒有,沒有任何類可以實現此協議,請檢查:https://ibb.co/ij1Wik – zgorawski