为什么要有forced unwrapping?

heartRaining 2014-07-23 12:42:49
RT

比如:
var hello: Int? = 404
println(hello)

既然直接用hello也能得到值404,那为什么非得要出现个hello!呢?它的实际用途是干嘛?

if hello {
println(hello!)//为什么这里就得用forced unwrapping,不用不也一样吗?
}
else{
println("nothing")
}
...全文
225 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bannings 2014-08-01
  • 打赏
  • 举报
回复
引用 5 楼 zhanglei5415 的回复:
[quote=引用 4 楼 zhangao0086 的回复:] [quote=引用 2 楼 zhanglei5415 的回复:] 强制约束,保证hello变量有值。如果hello为空,程序报错
我是觉得吧,这样虽然可以解释Swift的unwrapping,但是它的好处在哪呢?OC也没有forced unwrapping,但是也没有人抗议过吧?[/quote] swift 语言一个特点就是不会自动给变量赋初始值,但又要求在使用变量时一定要有值。也就是说在使用变量之前不进行初始化就会报错。 考虑下这一种情况,我们有一个自定义的MyViewController类,类中有一个属性是myLabel,myLabel是在viewDidLoad中进行初始化。因为是在viewDidLoad中初始化,所以不能直接声明为普通值:var myLabel : UILabel,因为非Optional的变量必须在声明时或者构造器中进行初始化,但我们是想在viewDidLoad中初始化,所以就只能声明为Optional:var myLabel: UILabel? 这是optional 可选值的作用,你说的强制解包有什么好处,这是语言自己实现的要求。上面已经有解释。[/quote] 其实我的意思很简单,强制解包没有什么好处
ReyZhang 2014-08-01
  • 打赏
  • 举报
回复
引用 4 楼 zhangao0086 的回复:
[quote=引用 2 楼 zhanglei5415 的回复:] 强制约束,保证hello变量有值。如果hello为空,程序报错
我是觉得吧,这样虽然可以解释Swift的unwrapping,但是它的好处在哪呢?OC也没有forced unwrapping,但是也没有人抗议过吧?[/quote] swift 语言一个特点就是不会自动给变量赋初始值,但又要求在使用变量时一定要有值。也就是说在使用变量之前不进行初始化就会报错。 考虑下这一种情况,我们有一个自定义的MyViewController类,类中有一个属性是myLabel,myLabel是在viewDidLoad中进行初始化。因为是在viewDidLoad中初始化,所以不能直接声明为普通值:var myLabel : UILabel,因为非Optional的变量必须在声明时或者构造器中进行初始化,但我们是想在viewDidLoad中初始化,所以就只能声明为Optional:var myLabel: UILabel? 这是optional 可选值的作用,你说的强制解包有什么好处,这是语言自己实现的要求。上面已经有解释。
ReyZhang 2014-07-31
  • 打赏
  • 举报
回复
swift 中的可选值 optional 其实是一个枚举值,看一下它的定义
enum Optional<T> : LogicValue, Reflectable {
    case None
    case Some(T)
    init()
    init(_ some: T)

    /// Allow use in a Boolean context.
    func getLogicValue() -> Bool

    /// Haskell's fmap, which was mis-named
    func map<U>(f: (T) -> U) -> U?
    func getMirror() -> Mirror
}
可以看到,它有两个枚举值,一个None,一个Some. 当值为nil时其实就是 Optional.None. 非nil 时为Optional.Some,并被Some(T) 包装(wrap)原始值,这也是为什么在使用Optional的时候要拆包的原因
ReyZhang 2014-07-31
  • 打赏
  • 举报
回复
强制约束,保证hello变量有值。如果hello为空,程序报错
Bannings 2014-07-31
  • 打赏
  • 举报
回复
引用 2 楼 zhanglei5415 的回复:
强制约束,保证hello变量有值。如果hello为空,程序报错
我是觉得吧,这样虽然可以解释Swift的unwrapping,但是它的好处在哪呢?OC也没有forced unwrapping,但是也没有人抗议过吧?
Bannings 2014-07-28
  • 打赏
  • 举报
回复
只能说,Swift目前不支持隐匿类型转换

1,420

社区成员

发帖
与我相关
我的任务
社区描述
Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于MAC OS和iOS平台,用于搭建基于苹果平台的应用程序。
swift 技术论坛(原bbs)
社区管理员
  • Swift
  • 网罗开发
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧