swift基础版本

swift4.0已经出现,为了巩固以前的知识,先上一版基础版本

下文是根据swift3.0的一本书挑拣后总结的,所有的代码都会以swift4.0为基础来做调试,避免有错误的地方


1、let常量、var变量

在swift中,不需要像OC或者很多语言一样,定义常量或者变量的类型,又不想JS一样,可以随时更改数据的类型.swfit在定义变量名的时候,会经过系统的推导,来获得这个变量的正确数据类型,我们也可以手工来制定这个类型,例如 let a:Double = 0,如果不指定,数字0默认是Int类型

常量:let pi = 3.1415926,这个pi常量是不允许修改的,如果后边有赋值pi = 3,则会在编译状态下报错 Cannot assign to value: 'pi' is a 'let' constant,不能赋值,pi是用let修饰的一个常数

变量:var a = 1 ; print(a) ; a = 2; print(a),打印分别是 1 2.在这里说明一下,swift中,代码如果分行写,是不需要加入任何的标点符号的,如果放到同一行,需要加入“;”来代表语句的分割

我们如果用 var pi = 3.14并且在后续代码中,都没有对pi的修改,系统不会报错,只会报一个⚠️;Variable 'a' was never mutated; consider changing to 'let' constant;变量a并没有发生过数值的更改,用let来修饰.所以我们在编写代码的过程中,不发生改变的变量都改成常量.让机器能更快的识别


2、类型元组

a、布尔型 Bool ,在swift中,Bool只有两个值 true 和 flase

b、整型,这个类型比较多Int8、Int16、Int32、Int64、Int、UInt8、UInt16、UInt32、UInt64、UInt,在众多的整型中,我们一般使用Int,而UInt为无符号整型用的比较少,其余的如果没有要求固定宽的整型,我们一般不使用.

接下来我们用不同的进制来把10赋值给常量

let a = 10(10进制);let b = 0b1010(2进制);let c = 0o12(8进制);let d = 0xA(16进制)

c、浮点型float(浮点型),Double(双精度浮点型) let pi = 3.1415926,系统会默认把未指定类型的浮点型认为是Double.

d、字符串类型 var a=""(空字符串),三个双引号,可以换行使用,之间的所有内容都是字符串内容.判断字符串是否为空,if a.isEmpty {}

e、数据转换 1、小范围到大范围转换是安全的 2、大范围到小范围转换是不安全的 3、布尔型和整形转换,非0即真,真为1

f、元组 就相当于用一个变量代表多个变量 var x = (1,2,3) ;(a,b,c) = x,相当于 a = 1 , b =2 ,c = 3,方便数据的传递

g、可选类型 类型后边加?代表可选,可以设置为nil

h、拆包 var str : String = nil ;if str == nil {print("数据为空")}else {print(str!)};print(str ?? "数据为空")


3、运算符

运算符和其他语言大多相同,我们来列举一下

a、算数运算符 +    -    *    / %

b、赋值运算符 =    +=    -=    *=    /=    %=

c、关系运算符 ==    !=    >    <    >=    <=

d、逻辑运算符    !    &&    ||

e、三元运算符    ? :


4、循环语句(控制转移语句)

a、for-in循环:for index in 1..<5 {print(index)}

b、while语句  var i = 0; while i<10 {print(i);i++)

c、repeat while  var i = 0; repeat {print(i);I++} while I < 10

d、continue 可以携带标签,指定跳转出哪个循环. labelA: for index in 1...4{for item in 2...3 {if intel == index {continue labelA}}}

e、break

f、fallthrough


5、分支语句

a、if    if true {print(“true”)}

b、if else    if a == “a” {print(“a”)}else {print(“not a”)}

c、else if    if a=="a"{print("a")}else if a=="b"{print("b")} else {print("not a and not b")}

d、switch    switch x {case 1: print("1") case 2,3,4 where x ==y : print("2 or 3 or 4");default :break}


6、字符和字符串

a、转义字符 \0    \\    \t    \n    \r    \"    \'

b、常见操作 

    1、字符串度    "hello".count

    2、前后缀判断    "hello".hasPrefix("he")    "hello".hasSuffix("lo")

    3、大小写转换    "Hello".uppercased()    "Hello".lowercased()    "hello".capitalized 首字母大写

    4、添加    var str = "hello"     str.insert("w",at: str.index(after:str.startindex))

    删除    var str = "hello"; let range = str.index(str.endIndex,offsetBy:-6)..<str.endIndex    str.removeSubrange(range)

    5、字符串提取    str.substring(from:Index)从开始index    str.substring(to:Index) 到index结束    str.substring(with: Range<Index>)提取某个范围    字符串替换 str.replaceSubrange(range, with: "hello")

    6、遍历字符串    var str = "swift" for c in str.characters {print(c)}


7、Collection类型(数组、字典、集合)

a、数组    var arr : [String] = ["swift","oc","java","C"]

b、字典    var dict: [String : Any] = ["name":"swift","name":"OC","name":"java"]

数字和字典的操作基本相同

操作:追加、插入、删除、替换

泛型:数据和字典本身就是泛型 例如

Array<String> 相当于 [String]

Dictionary<String,Any>相当于[String:Any]

var dict=["key1":"value1","key2":"value2"]

for key in dict.keys {

    print(key)

}

for value in dict.values {

    print(value)

}

for (key,value) in dict {

    print(key,value)

}

集合:是否包含某个元素 setStr : Set = ["a","b","c","d"]

if setStr.contains("a") {}        

let aSet : Set = [1,3,5,6]        

let bSet : Set = [2,4,5,6]        

print("并集\(aSet.union(bSet).sorted())")        

print("交集\(aSet.intersection(bSet).sorted())")        

print("前有后无\(aSet.subtracting(bSet).sorted())")        

print("差集\(aSet.union(bSet).subtracting(aSet.intersection(bSet)).sorted())")


8、函数闭包

函数声明

func 函数名(参数列表) -> 返回值类型{

    函数体

    return 返回值

}

inout 可以在函数内部更改外部的值

func swap(num1: inout Int, num2 : inout Int){}


9、枚举

10、结构体

11、类

12、协议与抽象类型

13、单元测试(看时间是否详细写)

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

推荐阅读更多精彩内容