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

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条:

Getters 和setter要求可以通过多种方式由一致性类型来满足.如果属性声明同时包含get和set关键字,则一致性类型可以使用存储的变量属性或可读写的计算(computed)属性(即同时实现getter和setter的属性)来实现它.但是,该属性声明不能作为常量属性或只读计算(computed)属性实现.If a property declaration includes only the get keyword, it can be implemented as any kind of property.

Swift相关问答推荐

自定义完整屏幕封面动画

在swift静态var扩展中,如何或可以访问和返回具体类?

不使用`lockFocus`将两个重叠的NSImage转换为单个NSImage

如何将图像插入到矩形中

如何使用AsyncTimerSequence获取初始时钟,然后在指定的时间间隔内开始迭代?

在一行语句中比较Date.now的相等性是否安全

SwiftUI 拖放:如果没有上下文类型,则无法解析对成员‘first’的引用

有没有一种方法可以访问封闭实例ObservableObject以从属性包装器中的任何位置调用objectWillChange.send()

响应 UITextField (UIViewRepresentable) 中的特定按键

我如何从 UIAlertController 导航到新屏幕(swiftUI)

如何让 SwiftUI 中的文本在旋转框架的同时侧向显示?

Apple 的自然语言 API 返回意外结果

'NSLog' 不可用:可变参数函数在 swift 中不可用

快速在 LLDB 中使用 po

Swift 3:日期与 NSDate?

如何在 SwiftUI 中创建带有图像的按钮?

swift 3 如何获取明天和昨天的日期(注意特殊情况)新月或新年

Swift 2.0 按属性对对象数组进行排序

如何在 Swift 中从字符串创建类的实例

我可以让#selector 引用 Swift 中的闭包吗?