村花的swift学习笔记1

ps:听说,这个笔记和SU的公开课一起看看更配哦~ 话不多说,上码吧! 今天写的是一个Calculator的viewcontroller,所以import UIKit,与别的语言没什么大差别 [php]import UIKit class ViewController: UIViewController {[/php] 下面的 UIlabel有两种写法: 第一种就是最常见的,直接在UIlabel后面加感叹号,直接解包UIlabel; 第二种就是UIlabel后面跟“?”,表示optional,接以下每一个继承这个UIlabel的display都要自己解包, 即每个display后面都要加上“!”; [php]@IBOutlet weak var display: UILabel! var userIsInTheMiddleOfTypingANumber = false @IBAction func appendDigit(sender: UIButton) { let digit = sender.currentTitle! 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() }[/php] 下面的performOperation的参数是一个函数operation,operation函数的参数是两个double,返回值是一个double, swift支持直接在调用函数时直接放一个函数作为参数,而且可以直接在传参的时候直接在括号内书写作为参数的函数代码, 规则如下: 1.直接去掉函数名字,把大括号提前,并将大括号所在原位置用in代替: minus(op1:Double,op2:Double) ->Double{return op2-op1} 变成: {(op1:Double,op2:Double) ->Double in return op2-op1} 2. swift会自动推测参数以及返回值,而且会自己给出默认的参数名如$0,$1...之类的,所以如果有本例子一样函数调用函数的情况,直接写参数就可以了: performOperation({$0 + $1}) 3.像第2点那样写固然没错,但是如果所调用的函数并没有多余的参数了,比方说performOperation函数,就可以把括号去掉: performOperation:{$0 + $1} 如果有多余的参数,就可以这样子写: performOperation(多余的参数,{$0 + $1}) 或者 performOperation(多余的参数){$0 + $1} 然后计算过程的代码就变的非常简洁而且具有可读性,很直观就可以看出参数和采用的计算符号。 这个就是 闭包。 [php]switch operation{ case "+":performOperation {$0 + $1} case "-":performOperation {$1 - $0} case "×":performOperation {$0 * $1} case "÷":performOperation {$1 / $0} case "√":performOperation {sqrt($0)} default:break } } [/php] 有认真看公开课的并且有跟着一起写程序的同学应该会发现,在跟着先生写performOperation函数的时候会抱一个查了很久都查不出来的bug: Method 'performOperation' with Objective-C selector 'performOperation:' conflicts with previous declaration with the same Objective-C selector;当我直接声明performOperation函数的时候,就会报这个错,原因是这个viewcontroller是继承于UIviewcontroller的,而UIveiwcontroller是oc里面的类,oc不支持函数的overloading,即同样的函数名,所以必须加上private。 然后我顺藤摸瓜搜了下下,swift里面一般有这三种 访问控制(Access Control):private,internal,public。 private:只有所在的单个swift文件里使用 internal:默认的,可写可不写,表示在整个模块里可以使用,如果是开发app,就可以在整个app里使用。 public:无控制使用。 [php]private func performOperation(operation: (Double,Double) ->Double){ if operandStack.count>=2{ displayValue = operation(operandStack.removeLast(),operandStack.removeLast()) enter() } } private func performOperation(operation: Double ->Double){ if operandStack.count>=1{ displayValue = operation(operandStack.removeLast()) enter() } } var operandStack = Array<Double>() @IBAction func enter() { userIsInTheMiddleOfTypingANumber = false operandStack.append(displayValue) print("\(operandStack)") } var displayValue: Double { get{ return NSNumberFormatter().numberFromString(display.text!)!.doubleValue } set{ display.text = "\(newValue)" userIsInTheMiddleOfTypingANumber = false } } } [/php] 和我一样刚学swift可以试试把框框里的程式码放到Xcode里试试哦~ 今天就写到这里咯,学习之路漫漫,加油吧~  

转载于:https://my.oschina.net/pigvillage/blog/698175

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值