Stanford CS193p iOS开发课程笔记(一)

2015-11-30  本文已影响368人  Dominic1992

iOS包含哪些部分

底层Core OS

BF4A86F7-5254-48C8-B6F6-61E14874CE3A.png

面向对象层Core Services

FD691FCE-2040-47AC-AB39-3F290A70C558.png

媒体层Media

3293D0AF-7FC3-4D44-8E2A-956FE4CBDADB.png

触摸层Cocoa Touch

3BCF6745-7D5F-4CF5-8C38-8095CFCD448D.png

计算器DEMO

在今天的学习中,完成了计算器demo的基本运算,具体掌握了如下知识点

    @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
        }
    }
}


上一篇 下一篇

猜你喜欢

热点阅读