Swift之旅:2.完成计算器,初探MVC设计模式

斯坦福大学公开课:iOS8

网易空开课地址链接:斯坦福大学公开课:IOS8开发

百度网盘资源下载链接:百度网盘

1.计算器完成①回车键及相关的代码

//定义一个数组,用来当做栈保存数据使用var openStack = Array<Double>();//enter用来执行进栈操作@IBAction func enter() {//设置重新开始输入字符串userIsInTheMiddleOfTypingANumber = false//将value进栈openStack.append(displayValue)println("openStack = \(openStack)")}这里面的displayValue定义其get和set方法: //用来进栈的数据var displayValue: Double{get{//将字符串转换为doublereturn NSNumberFormatter().numberFromString(display.text!)!.doubleValue}set{//将value转换成字符串display.text = "\(newValue)"//设置重新开始输入字符串userIsInTheMiddleOfTypingANumber = false}}其中NSNumberFormatter类中比较常用的两个方法:

) ->String? NSNumber 转换成String

) ->NSNumber? String 转汉城 NSNumber

NSNumberFormatter()是用来初始化实例用的,这里是隐式,表示用对象来引用其中的方法。

②加减乘除开根号运算

//用来进行运算@IBAction func operate(sender: UIButton) {//获得当前按钮的titlelet operation = sender.currentTitle//如果是中间输入的数字if userIsInTheMiddleOfTypingANumber {//进栈enter()}//switch判断是什么运算符,然后进行相应的运算switch operation! {case "×":performOperation(multiply)case "÷":performOperation({(op1:Double, op2:Double)->Double in return op1 / op2;})case "+":performOperation({(op1, op2) in op1 + op2;})case "":performOperation{$0 – $1}case "√":performOperation{sqrt($0)}default:break}}//定义一个方法用来进行加减乘除运算,参数类型是一个方法:(Double, Double)->Doubleprivate func performOperation(operation: (Double, Double)->Double) {//栈中必须有两个元素才能进行加减乘除的运算if openStack.count >= 2 {//把最后的两个元素分别出栈,然后进行运算displayValue = operation(openStack.removeLast(),openStack.removeLast())enter()}}//定义一个方法用来开平方,参数类型是一个方法:Double->Doubleprivate func performOperation(operation: Double->Double) {//栈中必须多于一个元素才能进行开平方if openStack.count >= 1 {displayValue = operation(openStack.removeLast())enter()}}①Swift中可以将一个方法作为另一个方法的参数:

multiply方法作为performOperation方法的参数

②Swift中可以隐式的将一个方法作为另一个方法的参数

performOperation(return op1 + op2;})

可以看到隐式方法作为参数的时候,要放在{}里面,称之为闭包

in后面表示方法内部的操作

③Swift有类型自动推导的功能,所以可以简写为:

op1 + op2;})

④Swift中编译器会自动给方法中的参数传一个默认值,第一个参数$0,第二个参数$1……..

)

⑤Swift中如果一个方法是另外一个方法的最后一个参数,那么可以将此方法放到原方法后面:

performOperation(){ $0 + $1}

方法中无参数了可以直接去掉():performOperation(){$0 + $1}这里要重点解释一下方法重载问题:

Swift语言支持方法重载,OC不支持方法的重载:

这两个方法,名称一样,但是参数个数不一样,属于方法重载。如果按照课程上说的,直接这么用会出现问题。

错误提示:Method ‘perform’ with Objective-C selector ‘perform: ‘ conflicts with previous declaration with the same Objective-C selector

原因是:这个类继承自UIViewController,也继承NSObject,编译器于是会按照OC中属性的约束来编译,所以就会报错。

修改这个错误方法很简单:

1.将两个函数的名字取不一样

2.用一个OC不支持的类型来阻止Swift语言的编译器按照OC方式揭发这个错误。

走过的路成为背后的风景,不能回头不能停留,若此刻停留,

Swift之旅:2.完成计算器,初探MVC设计模式

相关文章:

你感兴趣的文章:

标签云: