加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – Lazy Var vs Let

发布时间:2020-12-14 05:48:05 所属栏目:百科 来源:网络整理
导读:我想对Swift中的一些属性使用Lazy初始化. 我当前的代码如下所示: lazy var fontSize : CGFloat = { if (someCase) { return CGFloat(30) } else { return CGFloat(17) }}() 问题是,一旦设置了fontSize,它将永远不会改变. 所以我想做这样的事情: lazy let f
我想对Swift中的一些属性使用Lazy初始化.
我当前的代码如下所示:
lazy var fontSize : CGFloat = {
  if (someCase) {
    return CGFloat(30)
  } else {
    return CGFloat(17)
  }
}()

问题是,一旦设置了fontSize,它将永远不会改变.
所以我想做这样的事情:

lazy let fontSize : CGFloat = {
  if (someCase) {
    return CGFloat(30)
  } else {
    return CGFloat(17)
  }
}()

这是不可能的.

只有这个工作:

let fontSize : CGFloat = {
  if (someCase) {
    return CGFloat(30)
  } else {
    return CGFloat(17)
  }
}()

所以 – 我想要一个延迟加载但永远不会改变的属性.
这样做的正确方法是什么?使用let和忘记懒惰的init?或者我应该使用lazy var而忘记属性的常量性质?

这是 Xcode 6.3 Beta / Swift 1.2 release notes的最新经文:

let constants have been generalized to no longer require immediate
initialization. The new rule is that a let constant must be
initialized before use (like a var),and that it may only be
initialized: not reassigned or mutated after initialization.

This enables patterns like:

let x: SomeThing
if condition {
    x = foo()
} else {
    x = bar()
}

use(x)

which formerly required the use of a var,even though there is no
mutation taking place. (16181314)

很明显,你并不是唯一一个对此感到沮丧的人.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读