属性 的类型是 swift 中的协议是什么意思?

what is the meaning when a property's type is a protocol in swift?

我遇到过这样的代码:

protocol A
{
//some properties and methods
}

class B
{
 var property1: A
}

属性1 到底是什么意思? 这是否意味着 属性 必须符合协议 A ?还是像 class 类型的其他属性? 为什么我的 属性 必须是协议类型而不是 class 有什么具体原因吗? 请尝试用一个例子来解释,因为我对此很困惑。

Property1 是任何符合协议 A 的东西。所以这可能是另一个 class、一个结构等。假设您有一个协议 Vegetable 和一个名为 Market 的 class。您需要出售多种类型的 Vegetable,但是,您需要确保出售蔬菜。您可以使用协议执行此操作。

protocol Vegetable {
  var isForSale: Bool { get }
}

// Now let's create some vegetables
class Carrot: Vegetable {
  let isForSale = true
}

class Spinach: Vegetable {
  let isForSale = false
}

// This is our market.
class Market {
  let vegetables: [Vegetable] = [Carrot(), Spinach()]

  // Now we can check if the vegetables are for sale, because we know for sure that they conform to Vegetable so must implement this variable.
  var forSale: [Vegetable] = {
    vegetables.filter { [=10=].isForSale } // This will return [Spinach()]
  }
}