в чем смысл, когда тип свойства - это быстрый протокол? - PullRequest
0 голосов
/ 27 мая 2020

Мне попался такой код:

protocol A
{
//some properties and methods
}

class B
{
 var property1: A
}

что именно означает свойство1? Означает ли это, что свойство должно соответствовать протоколу А? Или это похоже на другие свойства типа класса? Есть ли какая-то конкретная c причина, по которой мое свойство должно относиться к типу протокола, а не к классу? Пожалуйста, попробуйте объяснить на примере, потому что я действительно сбит с толку.

1 Ответ

0 голосов
/ 27 мая 2020

Свойство1 - это все, что соответствует протоколу A. Таким образом, это может быть другой класс, структура и т. Д. c. Допустим, у вас есть протокол Vegetable и класс с именем Market. Вы захотите продать несколько видов 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 { $0.isForSale } // This will return [Spinach()]
  }
}
...