Stanford CS193p笔记

iOS开发课程 Stanford CS193p 的笔记。课程是在iOS 8 的平台教学,我是在iOS 9.3,Swift 2.3,Xcode 7.3上重写。Swift的更新非常快,老版本的Swift中的很多写法在新的2.3中已经不同,在最新的3.0中也不一样。

关于这个课程的全部项目可以去这个Github页面看到。

这篇笔记是全部15节课的笔记汇总,没有单独Swift语言的笔记。关于Swift的笔记可以前往此处。文中整理了很多课上没有细讲的内容,还有很多互联网上高质量的内容。


我的开发环境

  • Xcode 7.3.1
  • OS X 10.11.6
  • Swift 2.3
  • iOS 9.3 (真机模拟 iPhone 6)

1 Logistics, iOS 8 Overview

What’s in iOS

  • Cocoa Touch
    • Multi-Touch, Alerts, Core Motion, Web View, View Hierarchy, Map Kit, Localization, Image Picker, Controls, Camera
  • Media
    • Core Audio, JPEG/PNG/TIFF, OpenAL, PDF, Audio Mixing, Quartz(2D), Audio Recording, Core Animation, Video Playback, OpenGL ES
  • Core Services
    • Collections, Core Location, Address Book, Net Services, Networking, Threading, File Access, Preferences, SQLite, URL Utilities
  • Core OS
    • OS X kernel, Power Management, Mach 3.0, Keychain Access, BSD, Certificates, Sockets, File System, Security, Bonjour

Platform Components

  • Tools
    • Xcode 6 (Latest is 7)
  • Language(s)
    • Swift, Modern Language
    • let value = formatter.numberFromString(display.text!)?.doubleValue
  • Frameworks
    • Foundation, Core Data, UIKit, Core Motion, Map Kit
  • Design Strategy
    • MVC

Calculator Tutorial

  • Organization Identifier 是身份验证,需要保证独立性
  • 尽可能把控件放到蓝线上,也就意味着某种对齐
  • weak 关键字,与 reference counting 相关,具体后面会说
  • 对象都在 heap(堆) 中存在
  • 能用 let 尽量用 let,增加可读性;常量和类型(类,枚举等等)名词习惯上首字母大写
  • optional(可选) 类型,可能是当前类型的值,或者是 nil,例如 String?
    • nil 就是 not set
  • 在 optional 类型后面加 ! 可以强制取出对应的值,但如果值是 nil,就会crash
  • 所有的变量都必须被初始化

2 More Xcode and Swift, MVC

  • 类似UILabel 的控件 outlet 可以直接声明 ! 而不需要像之前所说的那样所有变量都必须被初始化,因为作为控件变量称为 implicit unwrap,是 storyboard 另外的机制
  • 右键点击一个控件会显示当前和该控件绑定的事件,可以在这里操作进行绑定和解绑定
  • 新建数组 var operandStack = Array<Double>(),可以被 infer(推断) 的类型最好不要写明类型
  • 计算型变量的 set get 方法,如果没有定义表示新值的参数名,则可以使用默认名称 newValue
  • command + / 可以快速注释
  • 利用 Swift 本身的特性可以写出非常精简的代码,比如函数尾闭包写法,用$0,$1…表示函数的参数

3 Applying MVC

  • 新建一个 class:File -> New -> File -> Swift File
  • 虽然没有要求类名和文件名一致,但是最好还是一样,这样比较符合惯例
  • 理论上来说不应该在一个 Model 类中 import UIKit
  • 可以用快捷语法来生成数组 [TypeName]()
  • 可以用快捷语法来生成字典 [KeyType: ValueType]()
  • *, +, sqrt 这些内置函数可以直接当参数传
  • 在字典里返回的是 optional 类型
  • 传参时除非传的是 class,不然都是传入一个复制的值
  • 传值的时候参数隐含是 let 的,即不可变
  • 函数可以直接返回一个 tuple
  • option(alt) 加点击文件可以把文件放到另一边
  • if let xx = xxxx {} 是通常的处理 optional 类型的方式
  • switch 如果列举了所有情况就不需要 default: break
  • private enum Op: CustomStringConvertible 由 Printable 更名而来

正在更新…

您的支持将鼓励我继续创作!