一尘不染

Swift协议只能设置吗?

swift

为什么我可以做到这一点而没有任何错误:

var testDto = ModelDto(modelId: 1)
testDto.objectId = 2

虽然我定义了这个:

protocol DataTransferObject {
    var objectType: DtoType { get }
    var parentObjectId: Int { get set }
    var objectId: Int { get }
    var objectName: String { get set }
}

struct ModelDto: DataTransferObject {
    var objectType: DtoType
    var parentObjectId: Int
    var objectId: Int
    var objectName: String

    init(modelId: Int) {
        self.objectType = DtoType.Model
        self.objectId = modelId
        self.parentObjectId = -1
        self.objectName = String()
    }
}

如果我的协议中的定义大部分被忽略(getter,setter定义),为什么我仍要使用它们?


阅读 209

收藏
2020-07-07

共1个答案

一尘不染

根据官方文件

可以通过多种方式通过符合类型来满足吸气剂和设置剂的要求。如果属性声明同时包含get和set关键字,则符合条件的类型可以使用存储的变量属性或既可读又可写的计算属性(即,同时实现getter和setter的)来实现它。但是,该属性声明不能实现为常量属性或只读的计算属性。
如果属性声明仅包含get关键字,则可以将其实现为任何类型的属性。

2020-07-07