如何解决后卫放手后强制解开
有人告诉我我的代码包含许多强制展开的功能。我认为如果可以确定操作的值不会为零,则可以这样做:
private var x: Int?
private var y: Int?
@IBAction func startButtonPressed(_ sender: UIButton) {
guard let numberOfRooms = selectedRooms.text,!numberOfRooms.isEmpty else {
return selectedRooms.placeholder = "type it,dude"
}
let rooms = Int(numberOfRooms)
x = Int(ceil(sqrt(Double(rooms!))))
y = x //grab some values from user input
maze = MazeGenerator(x!,y!) //generate a maze
hp = 2 * (x! * y!) //get hp value depending on user input
currentX = getRandomX(x!) //get random value in 0...x
currentY = getRandomY(y!)
currentCell = maze?.maze[currentX!][currentY!] //game starts in a random part of the maze
refreshButtons() //refresh UI
maze!.display() //print maze scheme in debug console
}
看起来不错吗?如果没有,该怎么办?
解决方法
建议避免使用 强制展开变量optional
。
即使您确定,在某些您未曾期望的特殊情况下,代码也可能会生成nil
值。然后,这将导致您的应用不必要地崩溃并带来糟糕的用户体验。
尝试使用可选绑定 if-let
/ guard-let
语句来安全地打开可选内容。
@IBAction func startButtonPressed(_ sender: UIButton) {
guard let numberOfRooms = selectedRooms.text,!numberOfRooms.isEmpty,let rooms = Double(numberOfRooms) else {
return selectedRooms.placeholder = "type it,dude"
}
self.x = Int(ceil(sqrt(rooms)))
self.y = x //grab some values from user input
guard let x = self.x,let y = self.y else {
return
}
maze = MazeGenerator(x,y)
hp = 2 * (x * y)
//for rest of the code I need to know the declaration of currentX,currentY,maze variables
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。