지금부터 Swift 설명(2)

import UIKit

class ViewController: UIViewController {


    @IBOutlet weak var display: UILabel!

    var userIsInTheMiddleOfTypingANumber: Bool = false

    @IBAction func appendDigit(sender: UIButton) {
        let digit = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber{
            display.text = display.text! + digit
        }else{
            display.text = digit
            userIsInTheMiddleOfTypingANumber = true
        }

        println("digit = \(digit)")
    }

}
위 코드의 UIlabel!한 가지 잘못?옵션일 수도 있고.
하지만 오류가 발생했습니다.
그래서 디스플레이잘못된 결말!text로 치면 오류가 좋아질 거예요.
어떻게 된 거야?
여기에 상세한 설명이 있다.
즉, 결말!기본 Optional을 사용하면 기본 Optional이 사용됩니다.은근히 담겨있어서 자동적으로 Unwrap이 됐어요.
?확실한 optional이 되어서 디스플레이!text의 결말!필요한 거야.
코드는 다음과 같다.

import UIKit

class ViewController: UIViewController {


    @IBOutlet weak var display: UILabel?

    var userIsInTheMiddleOfTypingANumber: Bool = false

    @IBAction func appendDigit(sender: UIButton) {
        let digit = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber{
            display!.text = display!.text! + digit
        }else{
            display!.text = digit
            userIsInTheMiddleOfTypingANumber = true
        }

        println("digit = \(digit)")
    }

}
그럼 전선을 제자리에 놓으세요.
지난번 계속이니까 버튼 3개를 복사해 Enter 키를 만들자.
Edit→Emoji와 Symbals로 enter를 입력하면 Enter가 나오니 그걸로 하자.
다음에 이것을 Action에 연결합니다.Name:enter, Argument는 None입니다.
이렇게 되면 Enter 가 문자판에 나타납니다.따라서 Enter appeendDigit에 대한 연결을 끊으십시오.
아래와 같은 그림.

그러면 다음 코드를 속성에 추가합니다
var operandStack:Array<Double> = Array<Double>()
이 유형은 Double을 요소로 패턴을 구성하는 일반 유형입니다. =Aray () 를 통해 초기화하지 않으면 오류가 발생합니다.
이렇게 모든 코드는 아래와 같다.
import UIKit

class ViewController: UIViewController {


    @IBOutlet weak var display: UILabel!

    var userIsInTheMiddleOfTypingANumber: Bool = false

    @IBAction func appendDigit(sender: UIButton) {
        let digit = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber{
            display.text = display.text! + digit
        }else{
            display.text = digit
            userIsInTheMiddleOfTypingANumber = true
        }

        println("digit = \(digit)")
    }

    var operandStack:Array<Double> = Array<Double>()
    @IBAction func enter() {
        userIsInTheMiddleOfTypingANumber = false
    }
}
operandStack에 표시되는 값을 입력하려면 다음과 같이 하십시오.
    @IBAction func enter() {
        userIsInTheMiddleOfTypingANumber = false
        operandStack.append(display.text!)
    }
이렇게 하면 오류가 발생할 수 있다.operandStack은 Double이고 display입니다.text!스트링이니까.
그러므로 다음과 같다
    @IBAction func enter() {
        userIsInTheMiddleOfTypingANumber = false
        operandStack.append(self.displayValue)
        println("operandStack = \(operandStack)")
    }

    var displayValue: Double {
        get{
            return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
        }
        set{
            display.text = "\(newValue)"
            userIsInTheMiddleOfTypingANumber = false
        }
    }
get의 경우 NSNumber FormString의 display를 기반으로 합니다.text를 더블로 바꿨네.
set에서 display.text="(newValue)"에 따라 더블을 String display로 변경합니다.text를 대입했습니다.
그리고 나서✖️Action 연결을 위한 버튼을 엽니다.type은 UIButton으로 만듭니다.
appeendDigit에 대한 연결을 끊습니다.
코드는 다음과 같다.
    @IBAction func operate(sender: UIButton) {
        let operation = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber {
            enter()
        }
        switch operation {
            case "×":
                if operandStack.count >= 2{
                    displayValue = operandStack.removeLast() * operandStack.removeLast()
                    enter()
                }

//            case "÷":
//            case "+":
//            case "−":
        default: break
        }
    }
이렇게 되면✖️이루어졌네.8 Enter 9 ✖️구문을 사용합니다.
operandStack = [8.0, 9.0]
operandStack = [72.0]
사칙 연산을 모두 실시하는 것이 상당히 지루하기 때문에 다음과 같은 내용을 개작하였다.
    @IBAction func operate(sender: UIButton) {
        let operation = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber {
            enter()
        }
        switch operation {
            case "×":performOperation(multiply)

//            case "÷":
//            case "+":
//            case "−":

        default: break
        }
    }
    func performOperation(operation: (Double,Double) -> Double){
        if operandStack.count >= 2{
            displayValue = operation(operandStack.removeLast(), operandStack.removeLast())
            enter()
        }
    }

    func multiply(op1: Double,op2: Double) -> Double{
        return op1 * op2
    }
performOperation 메서드의 매개 변수는 메서드입니다.
이것도 8 Enter 95입니다.✖️연산을 할 수 있습니다. 시도해 보세요.
operandStack = [8.0, 95.0]
operandStack = [760.0]
다만, 이것도divide와dd 등 연산 방법을 더해야 하기 때문에 상당한 노력이 필요하다.
나는 이곳에서 모자간을 쓴다.
    @IBAction func operate(sender: UIButton) {
        let operation = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber {
            enter()
        }
        switch operation {
        case "×":performOperation({(op1,op2) in return op1 * op2})

//            case "÷":
//            case "+":
//            case "−":

        default: break
        }
    }
이래도 움직일 거야.
    @IBAction func operate(sender: UIButton) {
        let operation = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber {
            enter()
        }
        switch operation {
        case "×":performOperation({(op1,op2) in op1 * op2})

//            case "÷":
//            case "+":
//            case "−":

        default: break
        }
    }
이렇게 하면 "Return"을 삭제해도 시작할 수 있습니다
    @IBAction func operate(sender: UIButton) {
        let operation = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber {
            enter()
        }
        switch operation {
        case "×":performOperation({ $0 * $1})

//            case "÷":
//            case "+":
//            case "−":

        default: break
        }
    }
$1*$2로 바꿔도 움직여야 합니다.
    @IBAction func operate(sender: UIButton) {
        let operation = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber {
            enter()
        }
        switch operation {
        case "×":performOperation(){ $0 * $1}

//            case "÷":
//            case "+":
//            case "−":

        default: break
        }
    }
함수부가 밖으로 나가도 움직여요.
    @IBAction func operate(sender: UIButton) {
        let operation = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber {
            enter()
        }
        switch operation {
        case "×":performOperation{ $0 * $1}

//            case "÷":
//            case "+":
//            case "−":

        default: break
        }
    }
()의 괄호도 원하지 않습니다.
    @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}

        default: break
        }
    }
이미 모든 연산을 실현하였다.'悼', '-' 의 순서는 상반된다.
현재의 전체 코드는 아래와 같다
import UIKit

class ViewController: UIViewController {


    @IBOutlet weak var display: UILabel!

    var userIsInTheMiddleOfTypingANumber: Bool = false

    @IBAction func appendDigit(sender: UIButton) {
        let digit = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber{
            display.text = display.text! + digit
        }else{
            display.text = digit
            userIsInTheMiddleOfTypingANumber = true
        }

        println("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}

        default: break
        }
    }
    func performOperation(operation: (Double,Double) -> Double){
        if operandStack.count >= 2{
            displayValue = operation(operandStack.removeLast(), operandStack.removeLast())
            enter()
        }
    }

    var operandStack:Array<Double> = Array<Double>()
    @IBAction func enter() {
        userIsInTheMiddleOfTypingANumber = false
        operandStack.append(self.displayValue)
        println("operandStack = \(operandStack)")
    }

    var displayValue: Double {
        get{
            return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
        }
        set{
            display.text = "\(newValue)"
            userIsInTheMiddleOfTypingANumber = false
        }
    }
}
그러면 다음에 루트 기호를 추가합니다
    @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
        }
    }
오류가 났네요.두 개의 performOperation 매개 변수가 있지만 사용하는 값은 하나뿐입니다.
따라서 performOperation 함수를 복사하고 다음 함수를 로드합니다.
    func performOperation(operation: Double -> Double){
        if operandStack.count >= 1{
            displayValue = operation(operandStack.removeLast())
            enter()
        }
    }
 Method 'performOperation' with Objective-C selector 'performOperation:' conflicts with previous declaration with the same Objective-C selector
상술한 오류가 발생했기 때문에 한 쪽이나 두 쪽 모두privete를 붙인다.
    private func performOperation(operation: (Double,Double) -> Double){
        if operandStack.count >= 2{
            displayValue = operation(operandStack.removeLast(), operandStack.removeLast())
            enter()
        }
    }

    func performOperation(operation: Double -> Double){
        if operandStack.count >= 1{
            displayValue = operation(operandStack.removeLast())
            enter()
        }
    }
완성했네.정상적으로 작동할 것 같습니다.

Costrants를 설정하고 Update Frame을 더하면 UI가 꽉 차게 설정됩니다.
마지막으로 만든 코드는 다음과 같다
import UIKit

class ViewController: UIViewController {


    @IBOutlet weak var display: UILabel!

    var userIsInTheMiddleOfTypingANumber: Bool = false

    @IBAction func appendDigit(sender: UIButton) {
        let digit = sender.currentTitle!
        if userIsInTheMiddleOfTypingANumber{
            display.text = display.text! + digit
        }else{
            display.text = digit
            userIsInTheMiddleOfTypingANumber = true
        }

        println("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
        }
    }
    private func performOperation(operation: (Double,Double) -> Double){
        if operandStack.count >= 2{
            displayValue = operation(operandStack.removeLast(), operandStack.removeLast())
            enter()
        }
    }

    func performOperation(operation: Double -> Double){
        if operandStack.count >= 1{
            displayValue = operation(operandStack.removeLast())
            enter()
        }
    }

    var operandStack:Array<Double> = Array<Double>()
    @IBAction func enter() {
        userIsInTheMiddleOfTypingANumber = false
        operandStack.append(self.displayValue)
        println("operandStack = \(operandStack)")
    }

    var displayValue: Double {
        get{
            return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
        }
        set{
            display.text = "\(newValue)"
            userIsInTheMiddleOfTypingANumber = false
        }
    }
}

좋은 웹페이지 즐겨찾기