基本语法

swift基本语法

五种类型

枚举(enum),结构体(struct),类(class),协议(protocol),函数(function types)
枚举和结构体属于值类型(value type),类和函数类型属于引用类型(reference type),而协议是抽象接口类型,属于值类型还是引用类型取决于它所引用的实例.
元组(tuple):对数据组织的容器,可以看作复合类型.

类型安全

1.可选型Optional
swift可以给任一类型对应的optional置空(nil),不像其它语言只能给指针或者引用类型的对象置空,而不能对值类型的对象置空.像C语言函数查找一个内容是否存在经常使用-1代表不存在,而没有像swift直接返回空这样,使API更加统一,直观.
2.没有隐式类型转换
任意两种不同的类型无法进行隐式转换,一般需要通过目的类型的构造器进行显式转换

变量与常量

变量用关键字var进行声明,而常量用关键字let进行声明
1.变量
如果一个变量对象的类型是枚举或结构体类型(即值类型),那么该对象自身的值允许被修改,且其成员变量也能被修改。如果一个变量对象的类型是类类型(即引用类型),那么该对象引用可以被修改,且该对象所引用的对象实例中的所有成员变量也能被修改。
2.常量
如果一个常量对象的类型为一个枚举或一个结构体类型,那么该对象的值,包括其所有成员的值都不允许被改变。如果一个常量对象的类型是一个类类型,那么该对象引用不能被改变,但它所引用的对象实例中的所有成员变量允许被修改.
3.在swift中,基本数据类型(整数,浮点数,字符串,字典,数组等)都是结构体类型,即为值类型,通过字面量或者直接构造的对象都属于常量,不能对实例的属性进行修改;而类类型直接创建的对象实例则可对其实例属性进行修改
4.swift允许一个常量先声明再被初始化,但只能被初始化一次,如果一常量被初始化之后再给它赋值,编译器会报错.

对象类型与类型标注

1.类型推导
直接用赋值操作符(assignment operator) = 声明一个对象并进行初始化,编译器会根据 = 右边对象的类型自动推导出 = 左边对象的类型.
2.一条声明语句声明多个对象
Swift中在一条声明语句中可以一次声明多个对象。通过逗号将声明的各个对象分隔开.

let a:Int,b:Double,c:String,d:20.0

3.类型标注(Type annotations)
通过冒号:显式的指定对象的类型

下划线

1.通配符 _,单独一条下划线,表示通配符(wildcard),一般用于对象声明中表示一个缺省对象.比如,不需要函数的返回值时,或者萃取元组时,不需要某些成员都可以用下划线来表示

func foo() ->Int{
return 10
}

let _ = foo()
_ = foo()
let (a,_,c) = (1,4,"abc")

语句与表达式

语句(statements),表达式(expressions)
1.一条语句末尾不需要跟一个分好,而是直接可以用换行符分割,当然可以用分好作为语句分隔符,swift中,用于分割语句的只能是换行符和分好,不能是其他符号,}不属于语句分隔符(C语言中可以作为).
2.C语言中几乎任一表达式都能单独作为一条语句,而Swift则完全相反——Swift编程语言中大部分表达式都不能作为完整的语句,尤其是返回类型不是 Void 的表达式,往往会出现编译报警。此时,我们需要将它们转为通配符表达式以消除警告.
以下表达式单独用作语句则会直接引发编译报错:直接以对象标识符或函数标识符作为基本表达式使用,闭包表达式,圆括号表达式与元组表达式中存在单一的对象或函数标识符,隐式成员表达式。

func foo() {
     
}
 
var a = 1, b = 2
 
a       // 编译器错误:表达式解决为一个未被使用的左值
foo     // 编译错误:表达式解决为一个未被使用的函数
 
({
    print("hello")
})      // 编译错误:表达式解决为一个未被使用的函数
 
(a)     // 编译器错误:表达式解决为一个未被使用的左值
(a, b)  // 编译器错误:表达式解决为一个未被使用的左值
 
//我们可以通过通配符表达式来消除编译错误。而对于闭包表达式与表示函数标识符的表达式,也可以直接通过函数调用表达式的形式来消除错误。

_ = a
_ = foo
foo()
 
_ = {
    print("hello")
    }
   ( {
    print("hello")
    })()
    _ = (a)
    _ = (a,b)

标识符

标识符:identifier,编程语言中用于指代一个对象或一个类型的名字。由于Swift代码文本基于Unicode,因此我们可以使用UTF-16与UTF-8编码中大部分字符对一个对象或类型进行命名
1.命名规则:
1)标识符中不能含有空白符(包括换行符、空格、制表符等)、数学符号、箭头、私有使用(或无效)的Unicode码点(code point)以及与画线、画边框有关的符号(除了下划线)。
2)不允许以数字打头,但数字可以包含在一个标识符的其他位置。
3)在ASCII字符集中,除了下划线与 $,其他非数字、非字母符号均不能用于标识符。

  1. 标识符不能以 $ 打头,也不允许以单一的 $ 作为标识符,但允许 $ 放在标识符的其他位置。
    2.Swift编程语言允许在某些场合使用自己的关键字来作为标识符,比如作为函数的参数标签
// 这里可以使用in、for等关键字作为参数标签名,
// 但不能使用inout作为参数标签名
func foo(in: Int, for: inout Int) {   
}

3.Swift中可以通过对关键字前后加符号作为标识符来使用,符号除了关键字外,还可以摆放其它合法标识符,但还是不允许摆放非法标识符的

注释

单行注释: //
断注释: /**/,可以进行成对嵌套
1.Markup格式化文档的时候必须注意,必须使用三条斜杠,Markup中具有许多参数可生成高亮格式的文字,在使用参数时,必须在参数前加一个 - 号,然后在参数名后加冒号,再跟描述文字。其中, - 号与参数名之间必须要用一个空格分隔,而冒号与参数名之间不需要任何空白符。

/// 这是一个结构体。
///
/// 它什么都没干……
/// - important: 这很重要!
/// - warning: 警告!
/// - attention: 注意!
/// - note: 另外……没什么好说的了……
/// - version: 1.0
/// - author: ooxx
struct MyStruct {
     
}

2.方法格式化文档
parameter:这个参数后面引入当前函数的形参说明。如果形参同时还包括命名的参数标签,那么说明一般针对形参名而不是参数标签名。
parameters:这个参数下面可以跟多个形参描述。
returns:这个参数后面可以对当前函数的返回值进行描述。
throws:这个参数后面可以描述当前函数可能会抛出某种异常。

/// 这是一个函数
/// parameter obj:一个整数对象
func foo(with obj: Int) {
     
}
 
/// 这又是一个foo函数
/// - parameters:
///     - a: 左操作数
///     - b: 右操作数
/// - throws: 可能会抛出异常
/// - returns: 返回一个Int类型的整数对象
func foo(a: Float, b: Float) throws -> Int {
    return Int(a + b)
}

3.像Objective-C中用于代码分段的 #pragma mark - 在Swift中是通过注释方式来实现的。因为Swift中没有 #pragma 预处理器指示符,所以使用 // MARK: 来表示标记分段
//MARK:
//TODO:
//FIXME:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 作品链接:http://www.jianshu.com/users/1e0f5e6f73f6/top_articl...
    打电话记错号码的人阅读 1,015评论 0 9
  • YES 2014WWDC发布 常量和变量使用注意 在实际过程中,建议先定义常量,如果需要修改再改变为变量(更加安全...
    南冯阅读 541评论 0 0
  • 常量&变量 什么是常量和变量 在Swift中规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量 使用l...
    去兜风喽阅读 559评论 0 0
  • 很多酵友都想了解沙棘,他所含的养营成份: 酵友们想了解用他制酵素的比例:可用1:1.5:6也可用1:3:10 酵友...
    羽美洁阅读 1,660评论 0 7
  • 当有人向我提出这个问题时,鸟爷脑门上一定大写着一个懵字。想想现在处于一个学术改变世界的年代,就去翻了几篇论文看看,...
    小西天鸟爷阅读 5,771评论 0 1