Swift 基本语法

一. Swift简介

Swift从2010年开始开发,直到2014年的苹果WWDC上进行发布,Swift1.0.在2015年的苹果WWDC上讲Swift2.0开源,至今已经到达Swift3.0,由于Swift的开源,Google将考虑使用Swift语言进行Android端程序的开发.
语言排行可以根据:http://www.tiobe.com 进行参考.

二. 声明变量和常量

Swift中声明变量的时候,不需要制定变量的类型,系统会根据开发人员输入的类型,匹配到变量的基本类型.
变量使用var关键字进行修饰例如

var int_var = 1;

常量使用let关键字进行修饰例如:

let a = "Carson";

在Swift中";"可加可不加.
在Swift中,字符串的函数:

var string_var = "This is";
// 字符串拼接
string_var += "Carson";
// 字符串中的字符删除
string_var.removeAtIndex(string_var.startIndex.advancedBy(2));
// 指定位置添加字符
string_var.insert("C", atIndex: string_var.startIndex.advancedBy(2));
// 指定位置添加字符串
string_var.insertContentsOf("ABCD".characters, at: string_var.startIndex.advancedBy(7));

注意:Swift中不存在隐式转换,即:低精度变量不可以直接赋值给高精度.需要进行强制类型转换.
注Swift重的强制类型转换:

var int_var = 23;
var double_var = Double(int_var);
// 判断字符串是否为空
string_var.isEmpty;// 为bool类型,true与false两个值
var int_value = 12;
print("\(int_value)"); // Swift中的原样输出

三. 数组和字典

Swift中使用变量声明的数组均为可变数组,不存在不可变数组,并且在数组初始化的时候,可以指定数组中元素的类型.或者,不指定数组中的元素类型,可以随意的将各种类型的元素存放在数组中.
Swift中的数组使用源码:

// 不定元素类型的数组
var array_var_1 = ["haha",23,"haha",true,23.0];
// 指定元素类型的数组:字符串数组
var array_var_2:Array = Array<String>();
// 整型数组
var array_var_3 = [1,2,3,2,1,12,23,12,3];
// 数组排序
var array_var_4 = array_var_3.sort();
// 数组最大值
array_var_3.maxElement();
// 数组最小值
array_var_3.minElement();

Swift中的字典与PHP中的字典类似,为键值对,直接赋值给数组的对象就可以完成.
Swift中的字典使用源码:

// 不指定字典的键-值类型
var dictionary_var_1 = ["name":"Carson","age":23,"gender":"Male"];
// 指定字典中的键-值类型
var dictionary_var_2:Dictionary<String,String> = ["name":"Carson"];
// 增加键值对
dictionary_var_2["gender"] = "Male";
// 通过键值删除键值对
dictionary_var_2.removeValueForKey("gender");
// 通过键值的索引进行删除键值对
dictionary_var_2.removeAtIndex(dictionary_var_2.indexForKey("gender")!);

四. 元组

元组是Swift中独有的一种数据格式,是一个可以返回多个值的数据格式.在声明的时候使用"()"声明,元组中的元素可以通过下标去访问,也可以通过键值去访问.

// 注意在元组中的键值不需要加""号
// 不指定元素类型类型的元组
var status_1 = (name:"Carson",gender:23);
// 指定元素类型的元组
var status_2:(name:String,gender:Int) = ("Leo",23);
// 从元组中取值(键取值)
print(status_1.name);
// (下标取值)
print(status_1.0);

元组中还以存放数组字典等类型.

五. 循环结构

Swift中的循环结构有三种分别为repeat-while,while,for三种结构,其中repeat-while结构与其他语言中的do-while结构一致(至少执行一次).
循环输出1~100示例源码

// repeat-while循环
var i = 1;
repeat {
    print(i);
    i++;
} while(i < 101);
// while循环
var j = 1;
while (j < 101) {
    print(j);
    j++;
}
// 普通for循环
for (var i = 1; i < 101; i++) {
    print(i);
}
// for in循环...运算符 与..<运算符
// ... 为闭区间,为[1,100]
for s in 1 ... 100 {
    print(s);
}
// ..< 为左闭右开区间,为[1,100)
for s in 1 ..< 100 {
    print(s);
}

扩充内容,使用for-in遍历数组,字典获取其中的元素.

// for-in 遍历数组
var array = ["haha",23,"haha",true,23.0];
for s in array {
    print(s);
}
// for-in 遍历字典
var dictionary = ["Name":"Carson","Gender":"Male"];
for (key,value) in dictionary {
    print(key,value);
}

六. 分支结构

Swift中的分支结构,与其他语言相同,if与if-else结结构,还有switch-case结构.
if-else结构示例源码:

// 判断字符串是否为空,为空的话输出为空,不为空则数组字符串.
var string_var = "ABCDEFG";
if (string_var.isEmpty) {
    print("is null!");
} else {
    print(string_var);
}

switch-case结构示例源码:
注意:在Swift中,case():中的参数为以为字符串,或者表达式类型.不仅仅局限于Int类型.使用约束条件的时候使用关键字where类似于SQL语句.并且,Swift中不需要添加break关键字,默认添加上了关键字break,若想使用成为像删除了break关键字的状态,让代码顺序执行,则需要使用语言所提供的fallthrough关键字.

// 声明一个10个元素的整型数组,使用switch-case判断奇数则输出奇数,为偶数则输出偶数
var array_int_var:Array<Int> = Array();
var count = 10;
for (var i = 0; i < count; i++) {
    array_int_var.append(random() % 100 + 1);
}
for s in array_int_var {
    switch (s) {
    case 1 ... 30:
        print(s,"为[1,30]之间的数");
        fallthrough;
    case s where s % 2 == 0:
        print(s,"为偶数!");
    case s where s % 2 != 0:
        print(s,"为奇数!");
    default:
    print("未知");
    }
}

七. 枚举

在C语言中,枚举类型将枚举名与一个整型值相对应,而在Swift中,不必要给每一个枚举类型给一个确定的值,若给值,不简单局限于整型值,还可以为整型值,字符串,字符,浮点等.
示例源码:

// enum (枚举名称):(枚举值类型) { case (枚举名称) = (枚举值) }
enum Direction:String {
    case East = "东"
    case West = "西"
    case North = "北"
    case South = "南"
}
// 获取得到枚举值(直接通过点语法得到的是枚举的名称,使用.rawValue为枚举值,.hashValue为枚举值在枚举中的index)
print(Direction.South.hashValue);

八. 函数

Swift中的函数也与C语言一样,也分为四种函数,无返回值无参数,有返回值无参数,无返回值有参数,有返回值有参数.函数必须先定义后使用.
示例源码:

// 无返回值无参数
func method_1() -> Void {
    print("我是无返回值,无参数的函数!");
}
// 函数调用
method_1();
// 无返回值有参数
func method_2(s:String) -> Void {
    print(s);
}
// 函数调用
method_2("我是无返回值,有参数的函数!");
// 有返回值无参数
func method_3() -> (String) {
    return "我是有返回值,无参数的函数!";
}
// 函数调用
print(method_3());
// 有返回值有参数
func method_4(s:String) -> (String) {
    return s + "啦啦啦!";
}
// 函数调用
print(method_4("我是有返回值,有参数的函数!"));

在Swift中函数可以进行嵌套声明与其他语言不同,嵌套在内部的函数则成为内部函数,其作用范围,仅在外部函数中.
示例源码:

func outMethod() -> Void {
    func inMethod() -> Void {
        print("我是内部函数!");
    }
    print("我是外部函数!");
    // 内部函数调用
    inMethod();
}
// 外部函数调用
outMethod();

使用函数修改实参的值的时候,借助关键字inout,即将实参的地址作为参数传递给函数,进行运算.
示例源码:

// 使用函数的方式,将a的值更改为20;
var a = 10;
func add(inout b:Int) -> Void {
    b += 10;
}
// 函数调用
add(&a);
print(a);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • YES 2014WWDC发布 常量和变量使用注意 在实际过程中,建议先定义常量,如果需要修改再改变为变量(更加安全...
    南冯阅读 537评论 0 0
  • 1.新建Xocode Swift 程序 2.(基本使用) 在Swift中没有.h 和.m文件 只有一个.Swift...
    圆小米123阅读 1,628评论 0 7
  • 2010年7月,chirs Lattner 用一年的时间完成了swift的基本框架,于2014年6月分布, 取消了...
    张无忌_阅读 520评论 0 3
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,771评论 1 10
  • 总会有一个人,让你觉得,靠近他,就是燃烧自己。 所以 选择一点一点地去靠近,不至于让火焰将自己化为灰烬。
    君晓墨阅读 161评论 0 0