まだだ、まだクーラーはつけぬぞ…!( ̄^ ̄)
— がちゃまにあ (@gachamania21) July 12, 2015
結局あきらめてつけちゃいました。
いや、猫様がだれてるししゃーないやん?ということにしておきたいがちゃまにあですどーもこんにちは。
ほんと暑くなったねー。
あの男が帰ってきたし、夏突入かな。
みなさん急になんで晴れになり
暑くなったと思います??
【松岡修造が帰国しました】
【松岡修造が帰国しました】
【松岡修造が帰国しました】
【松岡修造が帰国しました】
【松岡修造が帰国しました】
【松岡修造が帰国しました】 pic.twitter.com/EhlLhA7vhW
— ミラ♪ 五ッ星☆団団長 (@mirror_zannega) July 11, 2015
さすが修造。ぱねぇ。
まあそんな戯言はさておき、今日は家に引きこもってxcodeをいじっております。
電卓の仕組み、なんとなくわかった!
コードはこんな感じです
// // ViewController.swift // Copyright (c) 2015年 GACHA. All rights reserved. // import UIKit class ViewController: UIViewController { @IBOutlet weak var calc: UIButton! @IBOutlet weak var answer: UILabel! @IBOutlet weak var n1: UIButton! @IBOutlet weak var n2: UIButton! @IBOutlet weak var n3: UIButton! @IBOutlet weak var multiple: UIButton! var left:String = ""; var right:String = ""; var inr:Bool = false; var command = ""; override func viewDidLoad() { super.viewDidLoad() n1.addTarget(self, action: "calcf:", forControlEvents: .TouchUpInside); n2.addTarget(self, action: "calcf:", forControlEvents: .TouchUpInside); n3.addTarget(self, action: "calcf:", forControlEvents: .TouchUpInside); multiple.addTarget(self, action: "calcf:", forControlEvents: .TouchUpInside); calc.addTarget(self, action: "calcf:", forControlEvents: .TouchUpInside); // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func calcf (sender: UIButton){ var result: Int?; switch sender{ case multiple: command=sender.titleLabel!.text!; answer.text="*"; inr=true; case calc: if inr{ switch command{ case "*": result = right.toInt()! * left.toInt()!; default: result = 0; } answer.text="\(result!)"; left = ""; right = ""; inr=false; } default: if inr{ right=right+sender.titleLabel!.text!; answer.text=right; } else{ left=left+sender.titleLabel!.text!; answer.text=left; } } } }
サンプルコードを解析しながら作ったので解釈が合ってるか微妙。
私はこう理解したよーという覚書も兼ねて説明行きます。
まずはMain.storyboardにUIを配置。
今回はlabelとbuttonを適当に。
var left 最初の数字
var right 2つ目の数字
var inr:Bool=false 2つ目の数字が入ったか判断する(演算記号が入力されるとtrueに)
var command なんの演算記号が使われたかを判断するための変数(今回は掛け算のみなのであまり意味はない)
addTargetでタップされた(指が離れた?)時に何をするか設定。ここではfunc culcf。
func calcfで処理を定義する。
var resultは計算結果を代入する変数。
switch senderで押されたボタンごとの処理を定義する。
case multipleは*の記号が押された時の処理で、var commandにボタンに表示されている文字(ここでは*)を代入する、画面に「*」の記号を表示させる、var inrをtrueにする、という流れ。
case calcはvar inrがtrueかfalseかによって処理を変えている。
var inrがtrueの(A*Bの形で入力されている)場合、var commandの値によって処理を変える。
rightとleftは文字列で変数を定義しているので、それを数値に変えるためにtoInt()を使う。
defaultは*以外が押された時の処理(breakじゃいかんのだろうか…)
answer.textで計算結果を表示。
leftとrightとinを初期化。
で、*とcalc以外(=数字)が押された時、left・rightともに今の数値に押されたボタンの値を足す(ここも文字から数値に変化させるのでtoInt使用している)
以上!
っていう解釈で合ってるんでしょうか?整合はそれなりに取れてると思うんだけどな。
だから「もどき」なんです
勘のいい方はすでに気付いてると思うんですが、これ電卓の割にbuttonが少ない。
ええ、そうです。
手抜きましたけど何か?(`・ω・´)
今回の目的は電卓を完成させることではない、swiftというものがどういう仕組みで、どういう手順を踏めば実装できるのかを知ることなのだ!
だから数字が3までだろうが!掛け算しかなかろうが!今は良いのである!!
…って力説しとくか(笑)
まあでもほんとにそこが目的なので、細かいところにはこだわってません。
ぶっちゃけると、上のコードには致命的なバグあるし。
本当に電卓アプリ作るならちゃんと考えるけど、今はまあいっかと思ってます。
それより次は配列とか画像とか使ってサンプル作りたいんだよなー。
しばし考えます。