属性 的类型是 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()]
}
}
我遇到过这样的代码:
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()]
}
}