Swift 基础_01

//
//  ViewController.swift
//  SimpleCalculator
//
//  Created by ChenQianPing on 16/4/10.
//  Copyright © 2016年 ChenQianPing. All rights reserved.
//

import UIKit

class ViewController: UIViewController
{
    @IBOutlet weak var display: UILabel!

    // 用户是不是已经输入
    var userIsInTheMiddleOfTypingANumber:Bool = false

    @IBAction func appendDigit(sender: UIButton) {
        // Swift是非常强类型的语言
        // Swift有一个非常强大的特性,叫做类型推导
        let digit = sender.currentTitle!
        
        if userIsInTheMiddleOfTypingANumber{
            // 可选值(Optional)是不可以拼接字符串的,所以在这个地方,需要进行解包
            display.text = display.text! + digit
        } else{
            display.text = digit
            userIsInTheMiddleOfTypingANumber = true
        }
        print("digit = \(digit)")
    }
    
    @IBAction func operate(sender: UIButton) {
        let operation = sender.currentTitle!
        
        if userIsInTheMiddleOfTypingANumber
        {
            enter()
        }
        
        // 除数是栈中的最后一个元素,而除数是栈中最先弹出的元素
        switch operation {
        case "×": performOperation { $0 * $1}
        case "÷": performOperation { $1 / $0}
        case "+": performOperation { $0 + $1}
        case "−": performOperation { $1 - $0}
        case "√": performOperation { sqrt($0)}
        default:break
        }
    }
    
    // 函数的参数是一个函数
    func performOperation(operation:(Double,Double) -> Double){
        if operandStack.count >= 2{
            displayValue = operation(operandStack.removeLast(),operandStack.removeLast())
            enter()
        }
    }
    
    // 一个名字下的两个不同功能的函数,swift会自动识别应该用哪个函数的
    private func performOperation(operation:Double -> Double){
        if operandStack.count >= 1{
            displayValue = operation(operandStack.removeLast())
            enter()
        }
    }

    // 这个变量是一个内部的栈,去存储你输入的这些数,他的类型是一个数组,这个数组里存放的是Double的变量,注意在这个地方要初始化.(我们不能使用没有经过初始化的,会报错)
    // var operandStack: Array<Double> = Array<Double>()
    var operandStack = Array<Double>()
    
    @IBAction func enter() {
        userIsInTheMiddleOfTypingANumber = false
        
        operandStack.append(displayValue)
        
        print("operandStack = \(operandStack)")
    }
    
    var displayValue:Double{
        get{
            return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
        }
        set{
            display.text = "\(newValue)"
            userIsInTheMiddleOfTypingANumber = false
        }
    }
    
}

阅读更多
换一批

没有更多推荐了,返回首页