Stanford CS193p iOS开发课程笔记(一)
2015-11-30 本文已影响368人
Dominic1992
iOS包含哪些部分
底层Core OS

面向对象层Core Services

媒体层Media

触摸层Cocoa Touch

计算器DEMO
在今天的学习中,完成了计算器demo的基本运算,具体掌握了如下知识点
- 将多个button集中在一个Action里
1.先将多个button绑定
2.通过currentTitel获取button的值
@IBAction func buttons(sender: UIButton) {
let current = sender.currentTitle!
}
- 利用数组模拟入栈和出栈
@IBAction func enter() { //点击enter让数字入栈
userIsInTheMiddleOfTypingANumber = false
operandStack.append(displayValue) //入栈
print("operandStack = \(operandStack)")
}
var displayValue: Double {
get {
return NSNumberFormatter().numberFromString(display.text!)!.doubleValue //将display.text转化为Double类型
}
set {
display.text = "\(newValue)" //此处的newValue为默认名称.因为没有给setter定义新的参数名.若设置则可set(新参数名){}
userIsInTheMiddleOfTypingANumber = false
}
}
- 闭包的使用
func multiply(op1:Double, op2:Double) -> Double {
return op1 * op2
} //在case "x" :preformOperation(multiply) 中可通过闭包把这个func简化成"x" :preformOperation {$0 * $1}
完整代码如下:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var display: UILabel! //UILabel 是display的类型
var userIsInTheMiddleOfTypingANumber = false //用来判断是否已经输入了数字,初始默认为未输入
@IBAction func appendDigit(sender: UIButton) {//此处实现了,让所有数字button都集中在这一个方法里
let digit = sender.currentTitle! //此处用来识别是按了哪个数字,digit的类型为String
print("digit = \(digit)")
//此处判断是否正在输入数字
if userIsInTheMiddleOfTypingANumber {
display.text = display.text! + digit
} else {
display.text = digit
userIsInTheMiddleOfTypingANumber = true
}
}
@IBAction func operate(sender: UIButton) { //创建运算符操作方法
let operation = sender.currentTitle! //识别运算符
if userIsInTheMiddleOfTypingANumber { //可省略一次enter的点击操作,如不写这段代码则是"6 enter 6 enter X"最后输出36,有这段则是"6 enter 6 X"
enter()
}
switch operation { //利用switch语句实现运算符的操作
case "×" :performOperation {$0 * $1} //利用闭包简化代码
case "÷" :performOperation {$1 / $0} //因为$1为倒数第二个数,$0为最后一个数,故除法和减法要用$1 /- $0 而乘法和加法则不必考虑顺序
case "+" :performOperation {$0 + $1}
case "−" :performOperation {$1 - $0}
case "√" :performOperation2 {sqrt($0)}
default: break
}
}
func performOperation(operation: (Double,Double) -> Double) {
if operandStack.count >= 2 {
displayValue = operation(operandStack.removeLast(), operandStack.removeLast()) //获取了倒数第一个和倒数第二个数,并使其出栈
enter()
}
}
func performOperation2 (operation: Double -> Double) {
if operandStack.count >= 1 {
displayValue = operation(operandStack.removeLast())
enter()
}
}
// func multiply(op1:Double, op2:Double) -> Double {
// return op1 * op2
// } 在上面case "x" :preformOperation(multiply) 中可通过闭包把这个func简化成"x" :preformOperation {$0 * $1}
var operandStack = Array<Double>() //创建数组类型的运算栈
@IBAction func enter() { //点击enter让数字入栈
userIsInTheMiddleOfTypingANumber = false
operandStack.append(displayValue) //入栈
print("operandStack = \(operandStack)")
}
var displayValue: Double {
get {
return NSNumberFormatter().numberFromString(display.text!)!.doubleValue //将display.text转化为Double类型
}
set {
display.text = "\(newValue)" //此处的newValue为默认名称.因为没有给setter定义新的参数名.若设置则可set(新参数名){}
userIsInTheMiddleOfTypingANumber = false
}
}
}