学习stanford公开课 Developing iOS8 Apps with Swift 笔记(一)
来源:互联网 发布:云数据加密传输运营商 编辑:程序博客网 时间:2024/05/24 05:23
现在要开始学习编写ios应用,所以开始学习swift。看到网上很多代码都是用objective-c写的,我自己没有什么objective-c的经验,干脆直接用swift来学习编程好了,省去了学习objective-c的过程。
我自己只对C++比较熟悉,但是上手swift觉得其实还是挺容易的。
首先要注意swift有一个optional的类型。什么,你不知道optional类型,在编写swift的时候经常可以看到?或者是!。对于?就是一个optional的类型,对于optional只能有两个值,一个是nil,一个是非nil。在xcode里面编写的时候按optional键然后鼠标左击相应的变量会出现tutorial,在里面经常可以看到?,也就是optional类型的,对于string?这种类型,如果改成string!,那么就是string类型。这里需要注意一点:
swift是强类型语言,在非optional类型的时候如果该值为nil,那么整个程序会崩溃!这点事需要注意的!
接下来来说一个有趣的使用方法,现在我希望在ios上面写一个计算器小程序,那么肯定需要各种操作,加减乘除等等等等。如果每一个操作都写成类似的
switch operation{case "+":case "-":case "*":case "/":default :break}
switch operation{ case "+": if operandStack.count >= 2{ displayValue = operandStack.removeLast() + operandStack.removeLast() enter() } case "-": if operandStack.count >= 2{ displayValue = operandStack.removeLast() - operandStack.removeLast() enter() } case "*": if operandStack.count >= 2{ displayValue = operandStack.removeLast() * operandStack.removeLast() enter() } case "/": if operandStack.count >= 2{ displayValue = operandStack.removeLast() / operandStack.removeLast() enter() } default :break
可以达到我们需要的功能,但是可读性非常差,这不是一个好的程序员应该有的代码习惯,我们接下来对上面这段代码进行改进,我们可以发现其实每一段执行的函数几乎不变,那么我们可以通过写一个函数来实现在个功能。在swift当中,函数是可以当成一个变量传入另一个函数的(我在C++当中从来没有这样用过,但是貌似C++也可以实现这个功能?)这样做的好处是,可以提高代码的可读性,也令我们的代码简化了不少。
switch operation{ case "+": performOperation(plus) case "-": performOperation(minus) case "*": performOperation(multiply) case "/": performOperation(divide) default :break } func performOperation(operation:(Double, Double) ->Double){ if operandStack.count >= 2{ displayValue = operation(operandStack.removeLast(),operandStack.removeLast()) enter() } } func plus(op1: Double, op2: Double) ->Double{ return op1 + op2 }
这样修改之后虽然可读性提高了,但是代码量其实无形当中并没有降低,反而更高了,因为我们接下来还需要完成minus, multiply和divide三个函数,那么我们是否可以继续精简呢?答案是可以的,在swift当中,可以支持闭包(closure)。
实际上,在swift当中,将函数当作参数传递是非常常见的,所以我们可以这样改写
case "+": performOperation(plus)
<pre name="code" class="plain">func plus(op1: Double, op2: Double) ->Double{ return op1 + op2 }
变成
case “+”: performOperation({(op1:Double, op2:Double) ->Double in return op1 + op2})这样就可以直接将一个函数放到参数的位置。但是我们还可以做的更好,因为swift的type inference做的非常好,可以从上下文当中找到变量的类型,所以我们在上面调用的时候可以省略各个变量的类型,也可以直接省略返回值的类型,变成如下:
case "+": performOperation({(op1,op2) in return op1 + op2})
因为我们知道performOperation将两个double类型的变量作为参数传入,并且返回一个Double类型的值,所以在上面我们是可以直接省略参数类型和返回类型的。
但是我们还可以使这个更好,因为swift知道performOperation返回某一种类型,所以我们并不需要return这个关键字
case “+”:performOperation({(op1,op2) in op1 + op2})
case "+": performOperation({$0 + $1})更酷的是,如果你的参数是最后一个参数,在这个例子当中,performOperation只有一个参数变量,所以自然是最后一个,那么我们可以将它拿出来,改写成:
case "+": performOperation(){$0 + $1}这里需要注意的是,如果performOperation的参数不只一个,那么在最后一个参数前面的参数需要写到括号以内!如果这里只有一个参数,那么我们还可以直接将括号删除,变成:
case "+": performOperation {$0 + $1}
在最后额外提一句,在swift当中使用switch语句的时候,如果判断结果相等,执行完后面的语句之后会自动跳出,不需要像C++一样人工写break;
swift是不是很酷呢,这样我们就可以得到非常简洁的代码,并且可读性非常的强!
- 学习stanford公开课 Developing iOS8 Apps with Swift 笔记(一)
- Developing iOS 8 Apps with Swift 学习笔记
- Developing iOS 8 Apps with Swift Lesson 11学习
- 2013 Stanford公开课 Developing iOS 7 Apps for iPhone and iPad 讲义分享
- Start Developing iOS Apps (Swift) 学习笔记 (1)
- Start Developing iOS Apps (Swift) 学习笔记 (2)
- 斯坦福Developing iOS 8 Apps学习笔记(一)
- Stanford机器学习公开课
- 《Start Developing iOS Apps Today》学习笔记(一)部分翻译
- (Swift) iOS Apps with REST APIs(一)
- 斯坦福大学iOS8公开课笔记04—先暂停学习
- 《Start Developing iOS Apps Today》学习笔记(三)心得体会
- 斯坦福Developing iOS 8 Apps学习笔记(二)
- 斯坦福Developing iOS 8 Apps学习笔记(三)
- 斯坦福Developing iOS 8 Apps学习笔记(四)
- 斯坦福Developing iOS 8 Apps学习笔记(五)
- 斯坦福Developing iOS 8 Apps学习笔记(六)
- 斯坦福Developing iOS 8 Apps学习笔记(七)
- ESQL查询之简单的Oracle数据库查询测试
- 网络加载图片
- cortex_m3_stm32嵌入式学习笔记(二十三):红外遥控实验(输入捕捉+解码)
- .net利用Attribute简单实现AOP
- BZOJ 1263 SCOI2006 整数划分 高精度
- 学习stanford公开课 Developing iOS8 Apps with Swift 笔记(一)
- Android将应用log信息保存文件
- CF D. Fox And Jumping
- 功率谱密度
- CF C.Guess Your Way Out!
- MBProgressHUD特效
- windows下 eclipse + adt + ndk整合(非cygwin)
- BZOJ 1263 SCOI 2006 整数划分 高精度
- Visual Studio Tips: error LNK1117: syntax error in option 'VERSION:1.20b'