为什么我可以做到这一点没有任何错误:
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定义),为什么还要使用它?
解决方法
根据
official documentation:
吸气剂和固化剂的要求可以通过各种方式的一致性类型来满足.如果属性声明包含get和set关键字,则一致的类型可以使用存储的变量属性或可读写的计算属性(即实现getter和setter的一个)来实现.但是,该属性声明不能实现为常量属性或只读计算属性.如果属性声明仅包含get关键字,则可以将其实现为任何类型的属性.