[英]Swift: Working undefined functions in protocols?
我有一個這樣的協議:
protocol Robot {
func beep()
func boop()
func explode()
}
像這樣的結構:
struct Factory {
let robot: Robot
func testRobot() {
robot.beep()
robot.boop()
}
func killRobot() {
robot.explode()
}
}
它們都可以正常工作(至少在理論上是這樣),並且應該與Robot協議兼容。
但是,如果我有這樣的結構:
struct UselessRobot: Robot {
init() {
explode()
}
func explode() {
print("BANG")
}
}
然后XCode不會編譯它,因為我沒有定義嗶聲或嗶聲。 但是,如果我仍然定義它們,這些函數將為空:
extension Robot {
func beep() {}
func boop() {}
func explode() {}
}
有辦法解決這個問題嗎? 編寫不執行任何操作的代碼行似乎很奇怪。
工廠接受任何機器人,因此可以更容易地調用嗶嗶聲和噓聲,而不必擔心它們是否工作,因此我寧願避免進行一些可能的復雜檢查。
謝謝你的幫助!
正如Gerriet所說,簡短的答案是“否”。
如果您定義了漫游器協議,但是某些或大多數漫游器不會實現蜂鳴聲或防彈跳,那么您的協議就不是那么有用。
您可能會更具體...
protocol Robot {
func explode()
}
protocol NoisyRobot: Robot {
func beep()
func boop()
}
struct QuietRobot: Robot {
func explode() {
print("bang")
}
}
struct LoudRobot: NoisyRobot {
func explode() {
print("bang")
}
func beep() {
print("beep")
}
func boop() {
print("boop")
}
}
那個怎么樣:
protocol Robot {
//func beep()
//func boop()
//func explode()
}
extension Robot {
func beep() {}
func boop() {}
func explode() {}
}
struct UselessRobot: Robot {
init() {
explode()
}
func explode() {
print("BANG")
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.