IOS 入门(基于 IOS Apprentice 的真正面向零基础的完整解决的方案)

011 完善 App

2017-10-24  本文已影响21人  ErlichLiu

上一节

目前来看,我们的程序已经可以正常的运行了,甚至没什么 bug,但仍然有很多可以提升的空间。显然这个 App 看上去还不够美观,只是刚刚可以运行了而已,与此同时,这里还有几个小的错误可以调整一下。

首先是在弹出框中还是显式的是「Hello World」,实际上应该是「Bull's Eye」,但是我有个更好的想法,这个提示是根据玩家的表现来变化的。如果玩家把滑块正好放在目标值上,提示的就是「Perfect!」,如果玩家已经很接近目标值了,就显示「You almost had it!」,如果玩家离得太远就显示「Not even close...」等等,这样可以给玩家更好的反馈。

想象一下你是如何完成这个步骤的,要将这些逻辑语句放在那里?并且怎么编写程序?

改变这些东西最好的地方就是在showAlert()方法中了,因为这就是主管 UIAlertController的地方。你以前就做过根据一些计算信息来显示消息的语句,现在你应该很熟悉怎么操作了。

@IBAction func showAlert() {

let difference = abs(targetValue - currentValue) 
let points = 100 - difference score += points 
// 添加这一行
let title: String if difference == 0 {
title = "Perfect!"
} else if difference < 5 {
title = "You almost had it!" } else if difference < 10 {
title = "Pretty good!" } else {
title = "Not even close..." }
let message = "You scored \(points) points"
let alert = UIAlertController(title: title,
// 这里要变
message: message, preferredStyle: .alert)
let action = UIAlertAction(title: "OK", style: .default, handler: nil) alert.addAction(action) 
present(alert, animated: true, completion: nil)

startNewRound() 
updateLabels()
}

你创建了一个新的本地字符串 title,这个变量用来存储弹出框的 title 文本,这个 title 本身也没多少值。title 会显示什么值,取决于滑块的值和目标值之间的差值有多大。

那么你能跟得上这个逻辑吗?这就是一大堆的 if 语句,判断一些不同的情况,然后选择合适的来响应。

运行 App ,然后玩一小会,你会发现现在的 title 就会按照你的提示表现给你不同的反馈了。


思考:如何激励玩家更加认真的玩游戏,尽最大可能让滑块摆放的更加精准,我们打算奖励给把滑块摆放的更加精准的人给予双倍的奖励,让那些得到100分的人能再额外的得到100分奖励。

所以以下是我的改变:

@IBAction func showAlert() {
  let difference = abs(targetValue - currentValue) 
  var points = 100 - difference  // change let to var
  let title: String if difference == 0 { 
  title = "Perfect!"
  points += 100 
  } else if difference < 5 { 
    title = "You almost had it!" 
    if difference == 1 { 
    points += 50 
  }
} else if difference < 10 { 
  title = "Pretty good!"
} else {
  title = "Not even close..." 
} 
score += points . . .
}

本地变量总结


在之前我们也提到过本地变量和实例变量的问题,现在你应该了解这些,本地变量的生命周期只在声明它的方法内有效;实例变量则要长得多,它的生命周期跟 View Controller 对象的生命周期一样长,因为实例变量是属于对象的。

在 showAlert() 方法中,有 6 个本地变量,和 3 个实例变量。

let difference = abs(targetValue - currentValue) 
var points = 100 - difference 
let title = . . .
score += points 
let message = . . .
let alert = . . .
let action = . . .

练习:指出那些是本地的,那些是实例变量,在本地的中,那些是变量,那些又是常量?

答案:本地的是很好识别出来,因为它们第一次被用于方法中,在名称前都有 let 和 var:

let difference = . . . 
var points = . . .
let title = . . .
let message = . . . 
let alert = . . .
let action = . . .

此语法创建的是一个变量(var)或者常量(let),以为这些变量和常量都是在方法内部被声明的,所以都是本地化的。

difference、points、title、message、alert 和 action 这 6 个都被限制在 showAlert() 方法内部,在方法外部是不能使用的,并且当 showAlert() 方法执行完毕,这几个本地化属性也将不存在。

这一个小节就先讲到这啦,赶快回顾一下这一小节讲了什么吧,下一个小节我们将继续优化 App。
下一节

上一篇 下一篇

猜你喜欢

热点阅读