为什么我可以做到这一点而没有任何错误:
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定义),为什么我仍要使用它们?
根据官方文件:
可以通过多种方式通过符合类型来满足吸气剂和设置剂的要求。如果属性声明同时包含get和set关键字,则符合条件的类型可以使用存储的变量属性或既可读又可写的计算属性(即,同时实现getter和setter的)来实现它。但是,该属性声明不能实现为常量属性或只读的计算属性。 如果属性声明仅包含get关键字,则可以将其实现为任何类型的属性。