지금부터 Swift 설명(2)
13610 단어 아이폰 응용 프로그램 구축SwiftStanford
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
}
}
}
Reference
이 문제에 관하여(지금부터 Swift 설명(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/daisukeokaoss/items/21170f959e5f5bd70770텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)