簡體   English   中英

如何在Struct中實現協議可選方法?

[英]How to implement protocol optional method in Struct?

我已經在Movable Protocol中定義了可選方法

 @objc protocol Movable
 {
   @objc optional func move(to point: CGPoint)
 }

現在,我正在嘗試通過Struct繼承相同的協議,但是編譯器在下面給出的行中抱怨。

錯誤:-非類類型“ Shape”不符合類協議“ Movable”

 struct Shape: Movable
 {
     func drawShape(){
         print("DrawShapped Called")
     }
     func move(to point: CGPoint) {
        print("Struct Movable called")
     }
 }

並且,如果我在某個類而不是結構中繼承Movable協議,則它的工作原理完全正常。

任何幫助將不勝感激。 謝謝

當您將協議標記為@objc 您隱式將該協議標記為class協議。 也就是說,它必須由一個類來實現。 因為在Objective-C中,結構無法實現協議。
嘗試將其更改為

class Shape: Movable
{
    func drawShape() {
        print("DrawShapped Called")
    }
    func move(to point: CGPoint) {
       print("Struct Movable called")
    }
}

或標記不要將Movable標記為@objc

正如Swift Rabbit在評論中指出的那樣,更好的解決方案是默認實現:

protocol Movable {
    func move(to point: CGPoint)
}

extension Movable {
    func move(to point: CGPoint) {} // Do nothing by default
}

除非需要與ObjC代碼進行交互,否則應避免在事物中添加@objc 如果此協議必須與ObjC代碼進行交互,那么您將無法使用結構與它兼容,因此需要使Shape成為類。

暫無
暫無

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

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