Swift中协议内的属性

时间:2015-06-30 11:24:27

标签: swift

我学得很快。我需要问一下在协议中声明属性的真正用途是什么?

import UIKit

protocol parentProtocol
{
    var firstName:String {get}
    func fullName() -> String
}

class childClass:parentProtocol
{
    var firstName = ""
    func fullName() -> String {
        firstName = "rajesh darak"
        return firstName
    }
}

var c = childClass()
c.fullName()

虽然我将firstName声明为get(即只读),但在函数本身中我可以更改firstName的值。

1 个答案:

答案 0 :(得分:1)

协议parentProtocol声明了一个要求:符合要求的任何内容都必须具有可获取的属性firstName。它的表示继承的任何内容必须 gettable。

为什么要这种行为?嗯,这是一种设计选择,但这里有一个有用的例子:CollectionTypeCollectionType有一个属性count。现在,对于您要在CollectionType上执行的某些操作,您需要才能访问count。但是,没有必要限制从中继承的东西。例如,Array的计数是只读的:

var ar = [1, 2, 3]

ar.count = 5 // What's supposed to happen here?!

但这并不意味着每个 CollectionType必须具有只读计数。 Repeat例如有一个变量count

var re = Repeat(count: 3, repeatedValue: 0)   // [0, 0, 0]

re.count = 5                                  // [0, 0, 0, 0, 0]

让你能够改变它是完全有道理的。