当前位置: 首页 > 面试题库 >

Swift协议只能设置吗?

濮阳鸿卓
2023-03-14
问题内容

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

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关键字,则可以将其实现为任何类型的属性。



 类似资料:
  • 问题内容: 如何设置协议的可选属性?例如,UITextInputTraits具有许多可选的读/写属性。当我尝试以下操作时,出现编译错误(无法在“ textInputTraits”中分配给“ keyboardType”): 通常,在访问协议的可选属性时,您会添加问号,但这在分配值时不起作用(错误:无法分配给该表达式的结果): 该协议如下所示: 问题答案: 在Swift中是不可能的(还好吗?)。从AD

  • 协议(Protocols)为方法,属性和其他需求功能提供了蓝图。 它为方法或属性骨架而不是实现。 通过定义类,函数和枚举,可以进一步完成方法和属性的实现。 协议的一致性满足了协议要求的方法或属性。 语法 协议也遵循与类,结构和枚举类似的语法 - 协议在类,结构或枚举类型名称之后声明。 单个和多个协议声明也是可以的。 如果定义了多个协议,则必须用逗号分隔。 当要为超类定义协议时,协议名称应使用逗号跟

  • 协议规定了用来实现某一特定功能所必需的方法和属性。 任意能够满足协议要求的类型被称为遵循(conform)这个协议。 类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能。 语法 协议的语法格式如下: protocol SomeProtocol { // 协议内容 } 要使类遵循某个协议,需要在类型名称后加上协议名称,中间以冒号:分隔,作为类型定义的一部分。遵循

  • 我需要对使用TLS协议连接的F5机器工作。为此,我构建了一个使用HTTPsURLConnection对象的类。 然后,我下载了F5证书文件,使用JDK密钥工具创建密钥库,并使用它尝试将连接设置为使用TLS协议: (我没有被你抓住……) 代码似乎在快速传递,但是当我这样做的时候: 我得到。。。 “javax.net.ssl.SSLHandshakeException:sun.security.val

  • 问题内容: 我在Swift上建模所有者/所有者方案: 然后我有一对遵循上述建模类型的教授/学生: 但是我在类中的定义上收到以下错误: 非最终课程(“学生”)无法满足协议“ Ownee”的要求“所有者”,因为它在非参数,非结果类型的位置使用了“自我” 我试图了解导致此错误的原因,为什么将类定为final可以解决该问题,以及是否存在一些解决方法能够以不同的方式对此模型进行建模而不将其定为final。我

  • 协议设计 核心概念 EVM:以太坊虚拟机,轻量级虚拟机环境,是以太坊中智能合约的运行环境。 Account:账户,分两类:合约账户存储执行的合约代码;外部账户为以太币拥有者账户,对应到某公钥。 Transaction:交易,从一个账户到另一个账户的消息,包括以太币或者合约执行参数。 Gas:燃料,每执行一条合约指令会消耗一定的燃料,当某个交易还未执行结束,而燃料消耗完时,合约执行终止并回滚状态。