swift开发:语言基础
- 必要了解
- 快速索引查看
- 错误查询
- 严谨起步
- 项目命名规范
- 文件和声明的命名规范
- 图片资源的命名规范
- 注释规范
- 常规注释
- MARK
- 带代码提示效果的注释
- 开始学习
- 数据类型
- 字符串
- 数字
- 数组
- 字典
- 对象
- 布尔值
- 变量
- 常量
- 变量引用
- 函数
- block
- 类
- 类的基本格式
- 类的继承
- 一个功能完善的类:代理方法、接口方法、枚举类型
- 结构体
- 循环语句
- 流程控制
- 数据类型
- 工程结构设计
个人整理的swift语言的简单基础语法,便于快速进入开发。遵循个人学习理念【字、词、句、段、章、册、集】,从变量常量(字)入手,到运算逻辑(词、句),到函数(段),到类(章),知道这些内容,swift语言的基础学习基本可以告一段落了,接下来就可以开发简单的小APP了。
必要了解
到目前为止,swift已经经历了几个版本,网上有不少它的教程文档和博客案例,但某些已经是旧版本的内容了。
快速索引查看
在Xcode中,按下option
键,鼠标移动到某个方法或对象上,鼠标指针会变成问号的效果,点击即可查看该方法或对象的解释。
同样的,按下
command
键,鼠标移动到某个方法或对象上,当前方法或对象会变为蓝色带下划线的可点击对象,点击即可进入其相关的代码页面。按下`command`键 当前方法或对象会变为蓝色带下划线的可点击对象
点击即可进入其相关的代码页面
错误查询
在学习时遇到错误提示,应首先注意关键字(如;printIn已弃用,使用print),然后检查类型声明,最后查询网上相关的解答。
- 可以不写语句末尾的结束符,这个和js等语言不同,需要适应;
- 时刻注意类型;
- 使用
NSLog
或print
在控制台输出,前者只能输出字符串,后者可以输出任何类型; - 函数调用时,第二个参数开始需要书写参数名,如:
muFunc(5, end: 10, doName: "username")
; - 类实例化的时候必须写参数名,如:
let myClass = MyClass(name: "dj", age: 29)
; - 什么时候使用
?
,什么时候使用!
- 什么时候用
let
,什么时候用var
- 优雅的点语法
这是官方推荐的中文文档和代码示例:
《The Swift Programming Language》in Chinese
严谨起步
另外,学习一门语言前,还需要了解一下它的推荐语法,即开发规范,这有助于我们从一开始就养成良好的开发习惯,对于开发规范,可以通过多篇不同的文章来总结出其约定的规律,这样对于那些有歧义的语法予以适当注意,对于约定俗成的语法通过不断的练习来强化记忆,直到成为习惯。
开发规范涉通常及到以下几点:
- 变量、函数的命名规范;
- 类和类文件的命名规范;
- 工程目录的设计规范;
- 注释规范;
- 美观、严谨的语法排版;
学习一门语言的时候,一定记得不要玩异类语法,要知其然知其所以然,尽量按照原生、完整的语法来实现逻辑。这样做可以减少大部分错误的产生。
开发规范参考:
《17条 Swift 最佳实践规范》
注释规范
最后,还需要了解下swift的注释方法和规范,相关内容可网上搜索资料。注意的是,按照以往的代码习惯,不要在正常代码的后面加注释,swift是不写末尾的休止符号的,另外,IOS中的很多方法和属性都是比较长的字符,单行书写注释会导致文本换行,进而影响代码可读性,注释的优势也就无意义了。
常规注释
// 使用双斜线 加 一个空格 的注释
let stringMax: Int = 20 // 行尾注释不利于阅读
//双斜线后无空格的话注释不够美观,阅读略显拥堵
多行注释的用法:
/*
使用单个斜线和单个星号作为起始行,且第一行不写内容;
余下的行每行左侧缩进对齐;
* 也可以使用星号加单个空格对齐
* 注释的结尾使用单个星号和单个斜线结束,且注释结束行不在书写内容
*/
上面的多行注释是个人觉得比较友好的注释方法。在xcode中,注释的快捷键是CMD + /
符合,它会保留行前的缩进。执行一次可在添加注释和取消注释之间切换。生成的注释类似:
// 注释内容
// let fontSize = 14 <- 保留了缩进
// 第一行
// 第二行
// 第三行
MARK
xcode中的mark注释是为了方便查找和导航代码用的,swift中的写法变的更为简单了:
// MARK: 测试标示
// 自定义注释
func ····
// MARK: 标签
// TODO: 待处理
// FIXME: 修复
需要注意的是,它需使用大写字母加冒号,通常,mark注释的上下均需要留出一个空行,以区分代码的上下文。
Xcode中的MARK和TODO注释导航带代码提示效果的注释
常规的注释是不具有代码提示效果的,但使用三根斜线的注释则会显示出代码提示,简单的例子如:
/// RGBA色彩
/// - parameter r: Red红色
/// - parameter g: Green绿色
/// - parameter b: Blue蓝色
/// - parameter a: Alpha透明度
/// - returns: RGBA色彩
func RGBA(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) -> UIColor {
return UIColor(red: r/255.0, green: g/255.0, blue: b/255.0, alpha: a)
}
在使用的时候会出现提示:
带代码提示效果的注释 按住`option`键点击带注释的对象或方法开始学习
变量
语法:
var 变量名: 类型 = 变量值
示例:
var myOrigin: Point
var myVar: String = "Hello world!"
var myInt: Int = 49
常量
语法:
let 常量名: 类型 = 常量值
示例:
let myVar: String = "Hello world!"
let myInt: Int = 49
变量引用
语法:
\\(变量名)
示例:
let taskInt: Int: 5
let myString: String = "开始学习swift,这是第\\(taskInt)个任务"
print( myString )
// 输出 开始学习swift,这是第5个任务
函数
语法:
func 函数名(参数:类型[,参数:类型]) -> 返回类型 {
// 函数体
}
示例:
// 声明函数,无返回值 = func 函数名() -> Void {}
var name: String
func myFunc() {
self.name = "张三"
}
// 声明函数,无参数函数
func myFunc() -> String {
return "Hello world"
}
// 调用
let myFuncOutput: String = myFunc()
// 输出:Hello world
print( myFuncOutput )
// --------------------------
// 声明函数,一个参数
func myFunc( username: String ) -> String {
return "Your name is \\(username)."
}
// 调用
let myFuncOutput: String = myFunc( "张三" )
// 输出:Your name is 张三.
print( myFuncOutput )
// --------------------------
// 声明函数,多个参数
func myFunc( username: String, age: Int ) -> String {
return "Your name is \\(username), and age is \\(age)."
}
// 调用
let myFuncOutput: String = myFunc( "张三", age: 29 )
// 输出:Your name is 张三, and age is 29.
print( myFuncOutput )
类
swift中有类和结构体的概念,具体参考:
https://github.com/numbbbbb/the-swift-programming-language-in-chinese/blob/gh-pages/source/chapter2/09_Classes_and_Structures.md。
类的基本格式
class MyClass {
// 变量
let username: String
var age: Int
// 私有变量,外部只读
private var outputStr: String
// 初始化
// 实例化时都需要指定变量名:MyClass( name: "张三", age: 29 )
init (name: String, age: Int) {
self.username = name
self.age = age
}
// 方法定义
func funcFirst() {
print( )
}
// 带参数的方法
func funcSecond( username: String ) {
self.username = username
}
}
类的继承
类的基本特征是【继承性】【抽象性】【多态性】,那继承性是必须要学习的,它直接决定了类的功能和灵活程度。
继承自某个类,可使用冒号调用基类的类名,如:
class Photoshop: Adobe {
// 逻辑实现
}
该部分需要重点学习重写语法,了解类的一些关键字声明。
参考:Swift学习第十七:重载(override)
工程结构设计
哪怕我们的学习只是为了能自己开发一个小APP,也需要认真学习和实践一个优秀的项目开发方案。好的开发流程和工作目录可以大大提高我们的工作效率。
《iOS项目的目录结构和开发流程》
暂时这么多,慢慢梳理。