无法在 swift 中将常量声明为可选?

Posted

技术标签:

【中文标题】无法在 swift 中将常量声明为可选?【英文标题】:Unable to declare a constant as optional in swift? 【发布时间】:2017-01-22 17:01:18 【问题描述】:

我有以下代码。我试图将“名称”常量声明为可选,但它不允许它给出错误,因为

没有初始值的存储属性“名称”会阻止合成 初始化器

class VideoMode 

    let resolution = Resolution()
    var interlaced = false
    var frameRate:Float = 0.0
    let name: String?

编辑:为什么我会收到这样的错误,因为在结构的情况下它不会给出任何错误

【问题讨论】:

一个永远不会改变的'nil'常量是荒谬的。 我投票结束这个问题,因为它太离题了 @matt,“太像了?”哈哈。也许太傻了? @matt:你为什么投票关闭作为离题回答它?相关:meta.***.com/questions/262573/…:“回答离题问题,可以宣传这些问题是可以提出的问题,从而导致更多离题问题。” 相关:Why optional constant does not automatically have a default value of nil 【参考方案1】:

你不得不说

var name: String?

您必须为name 分配一个值或具有一个初始化name初始化程序 (init)。

因此,这是合法的:

class VideoMode 
    let name: String?
    init(name:String) self.name = name

这是合法的:

class VideoMode 
    let name: String? = "howdy"

但这不合法:

class VideoMode 
    let name: String? // compile error

原因很明显。如果namelet,并且您没有对其进行初始化,则它可以永远设置,因为它是一个常量。编译器不会让这种愚蠢的情况存在。

【讨论】:

【参考方案2】:

你必须这样写-

var name = String()

【讨论】:

以上是关于无法在 swift 中将常量声明为可选?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中删除 Unwrapped 并使其成为可选? [复制]

Doxygen - 声明参数为可选参数

swift 可选项(Optional)

Swift 可选绑定,为啥需要本地 var?

如何使用 swift 在 UIResponder 子类中将属性重新声明为读写?

如何在 Swift 上为堆栈声明“如果可选”