首页 > 解决方案 > 守卫让我们发现零

问题描述

我是新来的守卫让模式。为什么我的应用程序崩溃而selectedRooms.text不是nil返回部分?rooms当我知道numberOfRooms不是时,为什么是可选类型nil

guard let numberOfRooms = selectedRooms.text else {
    return selectedRooms.placeholder = "type something"
    }
let rooms = Int(numberOfRooms)
x = Int(ceil(sqrt(Double(rooms!)))) //found nil value

标签: swiftxcodeoptionalguard

解决方案


selectedRooms.text无法返回nil

AUITextField并且UITextView总是返回一个String值。如果 中没有文本,则返回空String( ) 。这就是part 没有执行而value 是.""UITextField and UITextViewelseroomsnil

现在,在下面的语句中,您将强制展开(!rooms.

x = Int(ceil(sqrt(Double(rooms!))))

但是,因为roomsnil,所以强行解包它会引发运行时异常

解决方案:

您还需要添加一个空检查以使该else部分生效,即

guard let numberOfRooms = selectedRooms.text, !numberOfRooms.isEmpty else { //here...
    return selectedRooms.placeholder = "type something"
}

推荐阅读