Swift文档显示,classesstructsenums都可以符合协议,我可以得出它们都符合协议的程度.但我不能让enum表现得像classstruct的例子:

protocol ExampleProtocol {
    var simpleDescription: String { get set }
    mutating func adjust()
}

class SimpleClass: ExampleProtocol {
    var simpleDescription: String = "A very simple class."
    var anotherProperty: Int = 69105

    func adjust() {
        simpleDescription += " Now 100% adjusted."
    }
}

var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescription

struct SimpleStructure: ExampleProtocol {
    var simpleDescription: String = "A simple structure"

    mutating func adjust() {
        simpleDescription += " (adjusted)"
    }
}

var b = SimpleStructure()
b.adjust()
let bDescription = b.simpleDescription

enum SimpleEnum: ExampleProtocol {
    case Base

    var simpleDescription: String {
        get {
            return "A Simple Enum"
        }
        set {
            newValue
        }
    }

    mutating func adjust() {
        self.simpleDescription += ", adjusted"
    }
}

var c = SimpleEnum.Base
c.adjust()
let cDescription = c.simpleDescription

我还不知道怎么让打了adjust()simpleDescription换.我的例子显然不会这样做,因为getter有一个硬编码的值,但是我如何在仍然符合ExampleProtocol的情况下为simpleDescription设置一个值呢?

推荐答案

这是我的try :

protocol ExampleProtocol {
    var simpleDescription: String { get }
    mutating func adjust()
}

enum ExampleEnum : ExampleProtocol {
    case Base, Adjusted

    var simpleDescription: String {
        return self.getDescription()
    }

    func getDescription() -> String {
        switch self {
        case .Base:
            return "A simple description of enum"
        case .Adjusted:
            return "Adjusted description of enum"
        }
    }

    mutating func adjust() {
        self = ExampleEnum.Adjusted
    }
}

var c = ExampleEnum.Base
c.adjust()
let cDescription = c.simpleDescription

Swift相关问答推荐

如何模拟可以立即返回和/或与Deliverc/await同步返回的CompletionButtons风格代码?

输出NSView到png

SWIFT中MAP的静态方法包装器

如何防止自动状态恢复,如果应用程序被启动打开特定的文档?

它是RxSwift中直接用于可扩展视图的有效的可扩展BehaviorRelay值?

在SWIFT中使用Objective-C struct 时出错(在作用域中找不到类型)

在MacOS上检测键盘是否有Globe键

如何在SwiftUI 4+(iOS 16+)中使用新的NavigationStack进行导航

ToolbarItem 包含在动画中但不应该包含在动画中

如何使用Swift宏和@Observable和@Environment?

如何使用带有 span 样式标签的 Swift XMLParser

SwiftUI 视图的默认成员初始化器 VS 自定义初始化器

SwiftUI 中的计时器崩溃屏幕

我们如何显示关于 UITextField 是 xCode Swift 的建议?

VStack SwiftUI 中的动态内容高度

在 SwiftUI 中,如何在 UIView 内或作为 UIView 使用 UIHostingController?

如何实现 Swift 的 Comparable 协议?

无法停止 AVPlayer

Swift中字节数组的NSData

如何快速显示数组的所有元素?