从入门到舍弃之基础语法篇,语言基础

/*

/*

前言:
作为3个品位1般,未有追求的OC开拓者,从swift一.0发端就买了几本swift参考书,直到今后swift三.0+了还没看完1本完整的swift参考书,未有写过三个全体的swif项目甚是惭愧,其实里面也断然续续学了少时,未有坚持不渝住,加之集团项目一贯是以OC为主,大量时光浪费在写作业代码,老是抱着swift不成熟,API还不安宁等一等的凡人心态,以往是时候反省下本身了,所谓知途迷返,见兔顾犬,为时不晚。(从现在初阶,霎时,立刻学习swif的供给性首要性能够参考下博客园@没故事的卓同学的稿子:
Swift再等等?作者的答案是:快上车http://www.jianshu.com/p/2452cb269ae2
话不多说,先撸为敬,以下是记录整医学习小码哥Mr why
的swift课程笔记,以作为复习查看之用
一 . 初识swift
Playground是什么?
从Xcode陆初阶产出(斯维夫特先河产出)
翻译为:操场/游乐场,对于学习斯威夫特基本语法格外有利于,所见即所得(神速查看结果),语法天性发生更改时,能够高速查看.
斯威夫特最宗旨的语法变化:

  • 数据类型

  • 运算符

  • 流程序调节制

  • Swift简介:
    支撑全数C和Object-C的中坚项目,帮忙面向进程和面向对象的编程机制;
    二种意义强大的集聚类型:数组和字典;
    元组;
    可选类型;
    Swift是1系列型安全的语言。

  • Playground提供了及时查看的功力
    不援救人机交互
    不支持应用程序
    飞速体验斯维夫特语法,测试API功效

  • 数据类型
    一:变量与常量的表明方式
    2:整型与浮点型
    3:元组类型
    四:可选类型

  • 主干代码

 算术运算符: 除了取模, 其余和OC同样, 包含预先级

 算术运算符: 除了取模, 别的和OC同样, 包蕴预先级

  1. swift中怎么样导入框架? 直接 import 框架名称 就可以
    例如 import UIKit
  2. 怎么着定义标志符?
    概念标记符必须告知系统 该标记符是三个变量照旧常量
    格式: let/var 标志符的名称 : 标记符的数据类型 = 值
  3. 语句甘休有啥变动?
    貌似景观下不必要写; 假使壹行中有多条语句;则须求以;分割
  4. 怎么打字与印刷内容?
    print(a)
    二. 常量&变量
    变量的骨干使用
    let a :Int =40
    //a=20// 张冠李戴写法,当三个字段定义为常量时是不可以修改的
    var b : Int = 60
    诚如习惯写成 var b = 60 (swift中的类型推导)
    变量的着力选取
    let a :Int =40
    //a=30// 错误写法,当三个字段定义为常量时是不得以修改的
    var b : Int = 60
    一般习惯写成 var b = 60 (swift中的类型推导)
    三. swift中数据类型
    swift类型的牵线
    斯维夫特中的数据类型也有:整型/浮点型/对象类型/结构体类型等等
    先理解整型和浮点型
    整型
    有符号
    Int8 : 有符号8位整型
    Int16 : 有符号16位整型
    Int32 : 有符号32位整型
    Int64 : 有符号64位整型
    Int : 和平台相关(暗许,相当于OC的NSInteger)
    无符号
    UInt8 : 无符号8位整型
    UInt16 : 无符号16位整型
    UInt32 : 无符号32位整型
    UInt64 : 无符号64位整型
    UInt : 和平台相关(常用,也就是OC的NSUInteger)(默许)
    浮点型
    Float : 三十三个人浮点型
    Double : 64浮点型(默认)
    // 定义三个Int类型的变量m,并且赋值为10
    var m : Int = 10
    // 定义三个Double类型的常量n,并且赋值为叁.14
    let n : Double = 3.14
    swift中的类型推导
    swift是强类型的言语
    swift中任何1个标志符都有明显的类型
    注意:
    如若定义2个标记符时有间接开始展览赋值,那么标志符后边的档次能够省略.
    因为swift有项目推导,会自动依照前边的赋值来决定前边的标志符的数据类型
    能够由此option+鼠标左键来查阅变量的数据类型
    //
    定义变量时并未有点名明显的连串,可是因为赋值给i1个20.20为整型.因而i为整型
    var i = 20
    // 错误写法:假若之后赋值给i三个浮点型数值,则会报错
    // i = 30.5
    // 正确写法
    var j = 3.33
    j = 6.66
    swift中基本运算
    /
    import UIKit
    //
    定义变量时未有点名分明的花色,但是因为赋值给i1个20.20为整型.由此i为整型
    var i=20
    //i=30.5 // 错误写法:假设现在赋值给i3个浮点型数值,则会报错
    从入门到舍弃之基础语法篇,语言基础。// 正确写法
    var j=3.33
    j=6.66
    /

    斯维夫特中在拓展着力运算时必须保险项目一致,不然会出错
    壹律档次之间才足以张开演算
    因为斯威夫特中并未隐式调换
    数据类型的转折
    Int类型转成Double类型:Double(标志符)
    Double类型转成Int类型:Int(标志符)
    */
    let a = 10
    let b = 3.14
    // 错误写法
    //let c = a + b
    //let c = a * b
    // 正确写法
    let c = Double(a)+b
    let d = a + Int(b)

 + – * / % ++ —

 + – * / % ++ —

3.逻辑分支
(1). 分支的介绍
分段即if/switch/叁目运算符等判别语句
因而分支语句能够垄断程序的推行流程
(二). if分支语句
和OC中if语句有明确的界别
认清句能够不加(),在Swift的论断句中务必有拨云见日的真假,不再有非0即真,必须有显然的Bool值,Bool有多少个取值:false/true
/
//1 swift 中if的写法
//1> if前面包车型客车()能够总结
//2>判别句不在有非0/nil即真,推断句中务必有让人惊叹标真假Bool值,Bool值有多少个取值:false/tru
// 演练一:
let a = 10
// 错误写法: 不再有非0即真 必须有醒指标Bool值 false/true
//if a {
// print(“a”)
//}
// 正确写法
if a > 9 {
print(a)
}
//2. swift 中else if的用法:用法和if的用法1致
let score = 92
if score < 0 || score>100 {
print(“不创设的分数”)
} else if score < 60 {
print(“不及格”)
} else if score < 80 {
print(“及格”)
} else if score < 90 {
print(“良好”)
} else if score <= 100 {
print(“优秀”)
}
/

(3). 三目运算符
斯维夫特 中的 叁目 运算保持了和 OC 壹致的风骨
/
//3. 三目运算符
//取两者最大值
let x = 20
let y = 30
// if写法
//var result = 0
//if m > n {
// result = m
//}else {
// result = n
//}
let result = x > y ? x :y
/

(四).guard的使用
guard是Swift2.0新增加的语法
它与if语句卓殊接近,它安排的指标是增加程序的可读性
guard语句必须带有else语句,它的语法如下:
当规则表达式为true时候跳过else语句中的内容,推行语句组内容
条件表明式为false时候实施else语句中的内容,跳转语句1般是return、break、continue和throw
guard 条件表明式 else {
// 条换语句
break
}
语句组
/
//例子
var age = 18
func online(age : Int) -> Void {
guard age >= 18 else {
print(“回家去找老妈”)
return
}
print(“小伙子能够上网了”)
}
online(age: age)
/

(五).switch分支
switch的介绍
Switch作为选拔结构中不能缺少的言辞也被投入到了斯维夫特中
澳门葡京备用网址,假设有过编制程序经验的人对Switch语句都不会认为不熟悉
但苹果对Switch举行了大大的加强,使其具备别样语言中并未有的特色
switch的简练利用
大旨用法和OC用法一致
差别之处:
switch后能够不跟()
case后方可不跟break(私下认可会有break)
/
//一. switch的骨干用法
let sex = 0
switch sex {
case 0:
print(“男”)
case 1:
print(“女”)
default:
print(“其他”)
}
/

简易利用补充一:
3个case判定中,可以推断四个值
多个值以,隔断
/
let sex1 = 0
switch sex1 {
case 0,1:
print(“正常人”)
default:
print(“其他”)
}
/

简言之利用补充二:
一旦期望出现从前的case穿透,则足以行使重要字fallthrough
/
let sex2 = 0
switch sex2 {
case 0:
print(“男”)
fallthrough
case 1:
print(“女”)
default:
print(“其他”)
}
/

Switch协理三种数据类型
浮点型的switch剖断
/
let f = 3.14
switch f {
case 3.14:
print(“π”)
default:
print(“not π”)
}
/

支撑字符串类型
字符串的运用前面会详细讲明
/
let m = 5
let n = 10
var results = 0
let operation = “+”
switch operation {
case “+” :
results = m + n
case “-” :
results = m – n
case “
” :
results = m * n
case “/” :
results = m / n
default:
results = 0
print(“违规操作符”)
}
/*
switch扶助区间判别
什么是距离?
平日我们指的是数字区间:010,100200
swift中的区间常见有三种
半开半闭区间:0..<10 表示:0~9,不包括10
闭区间:0…10 表示:0~10
*/
let scores = 88
switch score {
case 0..<60:
print(“不及格”)
case 60..<80:
print(“及格”)
case 80..<90:
print(“良好”)
case 90..<100:
print(“优秀”)
default:
print(“满分”)
}

import Foundation

// 变量var 常量let
// 表示符必须以字符(包括Unicode字符)、下划线(_)、美元符($)开头,但不能以数字开头,不可以包含空格,不能使用关键字,其长度没有限制。
var string = "hello"
string += "world"
println(string)

let 🐶 = "dog"
println(🐶)

//var 'class' = 3 // 关键字不推荐作为标示符

var name = "lucky"
var age: Int = 2

var a = 20, b : String , c = "Swift"
println("Her name is \(name)") // Swift中占位符号用\(变量名)的形式

// 整形用Int 就行了
let oneMillion = 1_000_000 // 可以增加下划线作为分隔符,也可以在数值前增加额外的值
let price = 0110
println(oneMillion)

// 整形之间的转换必须是显示装换
var book1:Int16 = 100
var book2:Int32 = 50

var totalPrice = Int32(book1) + book2   // 强制类型转换

var w = 4.0 / 0.0
println("4.0 / 0.0得\(w)")  // 输出正无穷大那个

var f = 0.0 / 0.0
println("0.0 / 0.0得\(f)")   // 非数

var width: Float = 2.1
var height: Double = 2.7
var area = width * Float(height)
println("3.2 * 2.7相乘之后得\(area)")

var area1 = Int(width) * 4  // 整形输出的结果会保留整数
println("宽的四倍是\(area1)")

/**************类型别名******************/
typealias Age = UInt16
var myAge: Age = 10

/**************元组*********************/
var score = (140, 140, "优秀")

var health: (Int, Int, String)
health = (156, 78, "Swift") // 必须为每一个元素赋值
println("health的值为\(health)")
println("health元组合的下标第三个元素的值为\(health.2)")

var text:(Int, (Int, String))
text = (24, (45, "jiayuanfa"))
println("text元组中的子元组的第二个值为\(text.1.1)") // 复合元组合数组方法

var score1: (math:Int, english:Int, accessment:String)
score1 = (math:78, english:89, accessment:"jiayuanfa")
println("数学成绩为\(score1.math)")

/************可选类型(Swift中的特性)*****************/
// 任何已知类型后面紧跟?即可代表可选类型 如 Int?
// 可选类型的作用就是表示值缺失的情况
var string2 = "helloGeek"
//var num: Int  = string2.toInt()
var num:Int? = string2.toInt()
println("字符串转化为整形后为\(num)")     // 输出nil 表示值缺失 nil表示一个值

// 强制解析:在变量或者常量后面添加!注意:必须可选类型的变量或者常量确实有值的时候才能解析成功
var num1: Int? = 10
var num2: Int? = 20
if num1 != nil && num2 != nil{
    let sum = num1! + num2!
    println(sum)
}else
{
    println("不能强制解析!")
}

// 可选绑定:可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量
var str3: String! = "jiayuanfa"
if var tmp = str3{
    println("str3的值为\(tmp)")
}else
{
    println("不能强制解析!")
}

// 隐式解析可选择类型:在已有类型后面添加!如Int!适用于被赋值之后不会重新变为nil的变量
var possibleStr: String! = "贾元发"
println(possibleStr)

// 注释:多行注释可以嵌套
/*

/*
第一层注释
第二层注释
*/

*/```

- 输出结果
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-5871bd464b344bc1.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)

######运算符
1:赋值运算符
2:算数运算符
3:溢出运算符
4:位运算符
5:逻辑运算符
6:nil合并运算符
7:运算符的结合性和优先级

- 核心代码

*/

*/

四. 循环
循环的介绍
在付出中不时会供给循环,常见的循环有:for/while/do
while.那里大家只介绍for/while,因为for/while最广大
//for循环的写法
// OC写法
//for (int i = 0;i< 10; i++){
// NSLog(@”%d”, i);
//}
//swift写法 for后面的()可以省
//最健康写法
// 1.价值观写法
//for var i = 0; i <10; i++ {
// print(i)
//}
// 2.区间for循环 for循环的forin写法
for i in 0..<10 {
print(i)
}
//3. 格外写法:要是在for循环中不须要动用下标i 能够采取 _ 来代替
for _ in 0..<10 {
print(“hello”)
}
//while和do while循环
//while循环
//一>.while的论断句必须有不易的真假,未有非0即真
//二>.while前边的()能够大约
var a=0
while a < 10 {
a ++
}
//do while循环
//使用repeat关键字来代表了do
let b = 0
repeat {
print(b)
b++
} while b < 20

import Foundation

var result = 10 + 10

var result = 10 + 10

五. 字符串
字符串的牵线
字符串在别的的付出中利用都以老大频仍的,OC和斯维夫特中字符串的界别,在OC中字符串类型时NSString,在Swift中字符串类型是String
OC中字符串@””,Swift中字符串””
使用 String 的原因:
String 是三个结构体,性能更加高, NSString 是二个 OC 对象,质量略差,
String 支持直接遍历
斯维夫特 提供了 String 和 NSString 之间的无缝转换
//一. 字符串的概念
//定义不可变字符串
let str = “hello world”
for c in str.characters {
print(c)
}
//二.字符串的行使
//2.一获得字符串的尺寸
//获取字符集合,再得到集合的count属性
//定义可变字符串
let count = str.characters.count
var str0 = “hello world”
//2.1回历字符串
for c in str.characters{
print(c)
}
//叁.字符串的拼凑
//三.一七个字符串之间的拼接
let str1 = “作者是码农界”
let str2 = “古天乐”
let str3 = str1 + str2
print(str3)
//3.2字符串和其余标记符之间的拼凑
let name = “mxp”
let age = 18
let height = 1.88
let info = “my name is (name), my age is (age), my height is (height)”
//三.三拼接字符串时,字符串的格式化 比如时间:03:04
let min = 2
let second = 18

//var x = 3
//var y = 4 // 赋值

result = 10 – 10

result = 10 – 10

let timeString = String(format:”%2d:%02d”,arguments :[min,second])
print(timeString)

//var a: Int
//var b = a = 20 // 警戒: Swift赋值表达式是一贯不值的,不帮忙三番五次赋值

result = 10 * 10

result = 10 * 10

//四.字符串的截取
/*Swift中提供了异样的截取情势
该方法尤其费劲
Index成立较为麻烦
简短的诀要是将String转成NSString来利用
在标志符后加:as NSString就可以
*/
let myStr =
“www.520.it.com”
var subStr = (myStr as NSString).substring(from: 4)
subStr = (myStr as NSString).substring(to: 3)
subStr = (myStr as NSString).substring(with:
NSRange(location:4,length:5))
//swift截取情势
// 4.一概念字符串
let str5 =
“http://weibo.com/2187793237/profile?topnav=1&wvr=6”
// 四.二截取开头地方
let fromIndex = str5.startIndex
let header = str5.substring(from: fromIndex)
// 4.3 截取停止地方
//let toIndex = str5.endIndex.advancedBy(-3) //swift2.0写法
let toIndex = str5.index(str5.endIndex, offsetBy: -3) //swift3.0写法
// 四.肆 截取中间的字符串
//var range = string.rangeOfString(“520”)//swift2.0写法
let range = str5.range(of:”520″)//swift3.0写法

// 算术运算符
var c = 19 / 4
println(“c value is (c)”) // 结果取整

result = 10 / 10

result = 10 / 10

六. 数组
(壹). 数组的牵线

var d = 2.5 / 1.2
println(“d value is (d)”) // 结果取余

print(result)

print(result)

数组(Array)是一串有序的由同样体系成分结合的集结
数组中的集合成分是铁板钉钉的,能够另行现身
Swift中的数组
swift数组类型是Array,是叁个泛型集合

// 求余运算
var g = -5.2
var h = 3.1
var mod = g % h
println(“result is (mod)”) // 正负重视于被除数

 

 

(2). 数组的起初化/定义
数组分成:可变数组和不可变数组
利用let修饰的数组是不足变数组
运用var修饰的数组是可变数组
*/
// 定义多个可变数组,必须先河化本事应用
var arr : [String] =
String
// 定义1个不行变数组
let arr0 : [NSObject] = [“Fsociety” as NSObject,28 as NSObject]

var a = 3
var b = a++ + 6
println(“先运算后++的值为(b)”)

/*

/*

//在声澳优个Array类型的时候能够选择下列的讲话之一
var stuArr1 : Array<String>
var stuArr2 : [String]

var e = ++a + 6
println(“先++再运算的值为(e)”)

 注意:Swift是平安严峻的编制程序语言, 会在编写翻译时等候检查查是或不是溢出,
但是只会检讨字面量而不会检讨变量, 所以在斯威夫特中必然要注意隐式溢出

 注意:Swift是安枕而卧严酷的编制程序语言, 会在编写翻译时等候检查查是不是溢出,
可是只会检讨字面量而不会检讨变量, 所以在Swift中自然要留意隐式溢出

//注解的数组须求开始展览开端化本事使用,数组类型往往是在宣称的还要拓展初叶化的
// 定义时直接开始化
var array = [“古天乐”,”吴彦祖”,”陈冠希”]
// 先定义,后起头化
var array0 : Array<String>
array0 = [“古天乐”,”吴彦祖”,”陈冠希”]
// (3). 对(可变)数组的基本操作
// 增多数码
array0.append(“刘亦菲”)

// 溢出运算符 &- &+ &* &/ &%
var willUnderflow = UInt8.min
// willUnderflow 等于UInt8的最小值为0
willUnderflow = willUnderflow &- 1 // 下溢出
println(willUnderflow)

 能够检查评定

 能够检查评定

// 删除成分
array0.removeLast()

//let x = 20
//let y = x &/ 0
//let z = x &% 0
//println(“溢出运算之后的y = (y) z = (z)”)

 var num1:UInt8 = 255 + 1;

 var num1:UInt8 = 255 + 1;

// 修改成分
array0[1] = “艾薇儿”
// 取值
array0[0]

// 位运算符
/*
&按位与
| 或
^异或
~取反
<< 左位移

 无法质量评定

 不也许检查测试

(肆). 数组的遍历
// 遍历数组
for i in 0..<array.count {
print(array[i])
}
// forin方式
for item in array{
print(item)
}

右位移
*/

 var num1:UInt8 = 255

 var num1:UInt8 = 255

// 设置遍历的间隔
for item in array[0..<2] {
print(item)
}
// 遍历数组的还要获取下标值
let names = [“古天乐”,”吴彦祖”,”陈冠希”]
for (index, name) in names.enumerated() {
print(index)
print(name)
}

// 扩展后的赋值运算符
/*
+= 对于 x += y 等于 x = x+y
-= 对于 x -= y 等于 x = x-y
*=
/=
&=
%=
|=
*/

 var num2:UInt8 = 250

 var num2:UInt8 = 250

(伍). 数组的集合
// 注意:唯有同样档次的数组技术集合
var array01 = [“古天乐”,”吴彦祖”,”陈冠希”]
var array02 = [“艾薇儿”,”景甜”,”范冰冰”]
var array03 = array01 + array02

// 区间运算符 a..<b (包蕴a,但不分包b)a…b(包涵a,也包蕴b)
for a in 0..<10{
println(“a 的值为(a)”)
}

 var result = num1 + num2

 var result = num1 + num2

// 不建议三个数组中存放种种类型的多寡
var array04 = [25, 44, “古天乐”] as [Any]
var array05 = [“艾薇儿”,”景甜”,”范冰冰”,18] as [Any]
array04 + array05

for m in 0…10{
println(“m 的值为(m)”)
}

 println(result)

 println(result)

七. 字典
(一). 字典的牵线

// 相比运算符 结果为Bool值
// === 特征相等运算符 !== 特征不等运算符号
// c = a === b 唯有a和b指向的体系实例形同的情事时,c为ture

 

 

字典允许依据有些键来访问成分
字典是由两有的集合构成的,贰个是键(key)集合,二个是值(value)集合
键集合是不能够有重新成分的,而值集合是能够再一次的,键和值是成对出现的
斯威夫特中的字典
Swift字典类型是Dictionary,也是二个泛型集合
*/

// 逻辑运算符
/*
&&与
|| 或
! 非
*/

 际遇那种主题素材能够利用溢出运算符消除该难题:

 蒙受这种主题素材能够动用溢出运算符消除该难题:

//(2). 字典的初步化
//Swift中的可变和不得变字典
//使用let修饰的数组是不行变字典
//使用var修饰的数组是可变字典
// 定义3个不足变字典
let dict = [“name” : “Fsocoiety”, “age” : 18] as [String : Any]
// 定义1个可变字典
var dict1 : [String : NSObject] = String
:NSObject

// 三目运算符
var j = 10
var k = 5
var str = j > k ? “j 大于 k” : “j 小于 k”
println(“比较结实为(str)”)

 

 

//在注明1(Wissu)个Dictionary类型的时候能够动用下面包车型地铁语句之1
var dict2: Dictionary<Int, String>
var dict3: [Int: String]
//注明的字典须求展开伊始化技艺利用,字典类型往往是在注解的还要拓展起始化的
// 定期字典的同时,进行初始化
var dict4 = [“name” : “Fsocoiety”, “age” : 18] as [String : Any]

// 空合并运算符 a ?? b 首先对a 举行空判断假如有值的话就张开解封,不然就回到默许值b
/**

 &+ &- &* &/ &%

 &+ &- &* &/ &%

// swift中4意对象,平日不接纳NSObject,使用AnyObject
var dict5 : Dictionary<String, AnyObject>

  • 壹:表明式a必须是可选类型
    暗许值b的类型必须和a存款和储蓄值的类型保持1致
    2:假如a为非空值的话(non-nil),那么值b将不会被赋值
    */
    let words = “jiayuanfa”
    var string: String? = “jikexueyuan”
    var content = string ?? words //
    那句话的意味就是假使变量string有值的话 重临string的值
    不然再次回到常量words的值
    println(“空合并之后的值为(content)”)

*/

*/

dict5 = [“name” : “陈冠希” , “age” : 28] as [String : Any] as
Dictionary<String, AnyObject>

// 运算符的优先级和OC一样,那里不作解释“`

 

 

//(三). 字典的基本操作
// 添扩展少
dict5[“height”] = 1.89 as AnyObject?
dict5[“weight”] = 72.0 as AnyObject?
// 删除字段
dict5.removeValue(forKey: “height”)
dict5
// 修改字典
dict5[“name”] = “古天乐” as AnyObject?
dict5.updateValue( “古天乐” as AnyObject , forKey: “name”)
dict5
// 查询字典
dict5[“name”]

控制流

一:顺序结构
二:分支组织
三:循环结构

import Foundation

/*********分支结构**********/
var age = 20
if age > 20{
    println("年龄大于20")
}else{
    println("年龄小于20")
}

// switch控制语句需要注意的点有 
/*
1:每一条case语句至少包含一条语句, 否则程序会崩溃;
2:每一条case语句完毕之后不必用break跳出循环,系统会自动终止;
3:case条件可以有多个表示或,用逗号隔开即可;
4:fallthough语句是贯穿语句;
5:case块后的条件还可以是一个范围或者元组,支持值绑定。
*/
let score = "a"
switch score{
    case "A", "a":
    println("优秀")
    case "B":
    println("良好")
    case "C":
    println("及格")
    case "D":
    println("不及格")
    case "E":
    println("差劲")
default:
    println("输入有误!")
}

// 使用fallthrough语句贯穿 即继续执行 不跳出
var num = 5
var desc = "\(num)是"
switch num{
case 2, 3, 5, 7 :
    desc += "质数,而且还是"
    fallthrough
default:
    desc += "整数"
}
println(desc)

// case后的条件为元组
var point = (x: 3, y: 3)
switch point{
case (0, 0):
    println("(0, 0)位于原点")
case (_ , 0):
    println("(\(point.0), 0)位于x轴")
case (0...5 , 0...5):
    println("(\(point.0), \(point.1)位于第一象限)")
default:
    break
}

// 值绑定
var point1 = (x: 1, y: 0)
switch point1{
case (0, 0):
    println("(0, 0)位于原点")
case (var x , 0):
    println("该点位于x轴上,x的值为\(x)") // y坐标值为0,进入该case块,并将元组的x成员绑定到临时变量a
case var (x, y) where x > 0 && y > 0:   // 条件值的绑定
    println("(\(x), \(y)位于第一象限)")
default:
    break
}

/*************循环结构************/
// 条件执行体不必写在小括号中,但是大括号必须有
for var count = 0 ; count < 10 ; count++ {
    println(count)
}

let base = 3
let power = 10
var answer  = 1
for _ in 1...power {    // 下划线表示循环条件中的任意值
    answer *= base
    println("answer的值为\(answer)")
}

// 标签:紧跟冒号的表示符, 只有放在循环语句或者switch语句之前才有作用
outer: for var i = 0 ; i < 5 ; i++ {
    // 内层循环
    for var j = 0 ; j < 3; j++ {
        println("i的值为\(i), j的值为\(j)")
        if j == 2 {
            break outer // 这里表示如果j == 2的时候结束外层循环 即结束了全部循环 continu语句指的是忽略本次循环 执行下一次循环
        }
    }
}```

- 运行结果

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-25793eb1d78bb676.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)

//var num1:UInt8 = 255

//var num1:UInt8 = 255

//(四).字典的遍历
// 遍历字典中具有的值
for value in dict5.values {
print(value)
}
// 遍历字典中全体的键
for key in dict5.keys {
print(key)
}
// 遍历全部的键值对

//var num2:UInt8 = 250

//var num2:UInt8 = 250

//(5).字典的集合
// 字典的联合
var dict6 = [“name” : “PrinceMei”,”age”:18] as [String : Any]

//var result1 = num1 + num2

//var result1 = num1 + num2

var dict7 = [“height” : 1.88, “Tel” : “+86 18526366356”] as [String :
Any]

//print(result1)

//print(result1)

// 字典不能相加合并
for (key,value) in dict6 {
dict7[key] = value
}

 

 

八. 元组
(一). 元组的牵线

/*

/*

元组是斯维夫特中特有的,OC中并从未有关项目
那如何是元组呢?
它是一种数据结构,在数学中央银行使广泛
接近于数组大概字典
能够用于定义1组数据
重组元组类型的数据能够称作“元素”

OC: 只对整数取模

OC: 只对整数取模

// (贰). 元组的概念
//元组的周围写法
(“0001″,”张三丰”, 80, 70)
// 给元素法郎宵素名称,之后能够透过成分名称访问成分
(id : “0001”,name: “张三丰”, age: 80, weight:70)
// (3). 元组的简便利用
//用元组来讲述2个HTTP的错误音信

NSLog(“%tu”, 10 % 3)

NSLog(“%tu”, 10 % 3)

// 元组:HTTP错误提示
let array = [404, “Not Found”] as [Any]

 

 

// 写法一:
let error = (404, “Not Found”)
print(error.0)
print(error.1)
// 写法二:
let error1 = (errroCode : 404, errorInfo : “Not Found”)
print(error1.errroCode)
print(error1.errorInfo)

斯威夫特:援助小数取模 

Swift:帮忙小数取模 

// 写法三:
let (errorCode,errorInfo) = (404,”Not Found”)
print(errorCode)
print(errorInfo)

      注意:二.0支撑, 3.0从此就分外了

      注意:2.0支撑, 三.0之后就非常了

/*
九. 可选类型
(壹). 可选类型的牵线

*/

*/

注意:
可选类型时swift中较掌握的二个知识点
临时先领悟,多采用Xcode的提醒来使用
乘机学习的鞭辟入里,稳步领悟里面包车型客车法则和好处
概念:
在OC开荒中,若是1个变量暂停不采用,能够赋值为0(基本天性类型)也许赋值为空(对象类型)
在swift开采中,nil也是二个奇特的类型.因为和诚实的类型不协作是不可能赋值的(swift是强类型语言)
可是付出中赋值nil,在所难免.由此推出了可选类型
可选类型的取值:
空值
有值
*/

// print(10 % 3.5) //error!

// print(10 % 3.5) //error!

// (二). 定义可选类型
//定义三个可选类型有二种写法
//最大旨的写法
//语法糖(常用)

 

 

// 错误写法
// let string : String = nil //swift2.0
// 注意:name的类型是三个可选类型,然则该可选类型中得以存放字符串.
// 正确写法:
// 写法一:定义可选类型,语法糖(常用, 极力推荐)
let string : String? = nil

let value1 = 5.5

let value1 = 5.5

// 写法二:定义可选类型
let name : Optional<String> = nil

let value2 = 2.2

let value2 = 2.2

// (3).可选类型的采取
// 演习1:给可选类型赋值
// 定义可选类型

let result2 = value1.truncatingRemainder(dividingBy: value2)

let result2 = value1.truncatingRemainder(dividingBy: value2)

var string0 : Optional <String> = nil

print(result2)

print(result2)

// 给可选类型赋值
// 错误写法:由此该可选类型中不得不存放字符串
//string0 = 134
// 正确写法:
string0 = “I am Handsome”
// 打字与印刷结果
print(string0 as Any)

 

 

// 演习2:抽取可选类型的值
// 收取可选类型的真实值(解包)
print(string0!)

 

 

// 注意:借使可选类型为nil,强制收取当中的值(解包),会出错
//string0 = nil
//print(string0!) // 报错

/*

/*

// 正确写法:
if string0 != nil {
print(string0!)
}

 自增 自减

 自增 自减

// 轻易写法:为了让在if语句中能够方便使用string
// 可选绑定
if let str = string0 {
print(str)
}

*/

*/

// (4). 真实应用场景
//目标:让代码特别谨慎
// 通过该措施创造的UMuranoL,大概有值,也说不定未有值.
// 错误写法:假设重回值是nil时,就不能够收到了
//
假使字符串中有中文,则重返值为nil,因而该措施的重临值就是二个可选类型,而选取3个NSUKugaL类型接收是不对的

// 在swift3.0之前

// 在swift3.0之前

//let url : NSURL = NSURL(String:
“www.520it.com”)
//错误写法

// var a = 1

// var a = 1

// 正确写法:使用可选类型来抽取
//let url : NSURL? = NSURL(String:
“www.520it.com”)
// 该格局选取项目推导
let url1 = NSURL(string:
“www.520it.com”)

// a++  //
在旧版的Swift中那是足以的,可是在Swift叁.0之后就会报错,无法如此写了

// a++  //
在旧版的斯威夫特中那是足以的,不过在斯维夫特三.0之后就会报错,无法那样写了

// 通过url来创设request对象:在使用可选类型前要先进行剖断是还是不是有值
// 该语法成为可选绑定(假如url有值就解包赋值给tempU福特ExplorerL,并且实践{})
if let tempUrl = url1 {
let request = NSURLRequest(url: tempUrl as URL)
}

 

 

10. 档次转化
科学普及的花色转化符号

// 在Swift3.0之后

// 在Swift3.0之后

is : 用于决断八个实例是不是是某一系列型
as : 将实例转成某1种类型
*/

// 只好写成 

// 只好写成 

//例子
// 1.定义数组
let array : [AnyObject] = [18 as AnyObject,”Jack” as AnyObject,1.85
as AnyObject]
// 二.收取数组中的第1个成分
let objc = array.first!
// 叁.判别第一个要素是还是不是是3个Int类型
if objc is Int {
print(“是Int类型”)

// var b = 1

// var b = 1

}else {
print(“非Int类型”)
}

// b = b + 1 依然 b += 一(提出写法)

// b = b + 一 或许 b += 一(提出写法)

// 四.将objc转成真正的类型来使用
// 四.1.as?
将AnyObject转成可选类型,通过判定可选类型是还是不是有值,来决定是或不是转会成功了
let age = objc as? Int
print(age!)
// 4.2.as!
将AnyObject转成具体的品类,但是注意:假诺不是该类型,那么程序会崩溃
let age1 = objc as! Int
print(age1)

 

 

/*

/*

 赋值运算

 赋值运算

 = += -= /= *= %=

 = += -= /= *= %=

*/

*/

var num1 = 10

var num1 = 10

num1 = 20

num1 = 20

num1 += 10

num1 += 10

num1 -= 10

num1 -= 10

num1 *= 10

num1 *= 10

num1 /= 10

num1 /= 10

num1 %= 5

num1 %= 5

print(num1)

print(num1)

 

 

/*

/*

 基本用法和OC同样, 唯1要专注的是表明式的值

 基本用法和OC同样, 唯一要留心的是表达式的值

 OC: 表明式的叁结合方向是从左至右,
整个表明式的值全体的值等于最后2个变量的值, 简单的说正是接贰连三赋值

 OC: 表明式的咬合方向是从左至右,
整个表达式的值全部的值等于最终2个变量的值, 简单来讲正是接连赋值

 

 

 斯维夫特: 不允许延续赋值, Swift中的整个表明式是尚未值的. 首即使为了制止 if
(c == 九) 那种气象误写为 if (c = 玖) , c = 9是3个表明式,
表明式是没有值的, 所以在Swift中if (c = 玖)不树立

 Swift: 不容许接二连三赋值, 斯维夫特中的整个表明式是绝非值的. 首假如为着防止 if
(c == 玖) 那种情形误写为 if (c = 九) , c = 九是3个表明式,
表达式是从未值的, 所以在斯威夫特中if (c = 九)不树立

 

 

 var num2:Int

 var num2:Int

 var num3:Int

 var num3:Int

 num3 = num2 = 10

 num3 = num2 = 10

*/

*/

 

 

 

 

/*

/*

 关系运算符, 得出的值是Bool值, 基本用法和OC同样

 关系运算符, 得出的值是Bool值, 基本用法和OC同样

 > < >= <= == != ?:

 > < >= <= == != ?:

*/

*/

var result1:Bool = 250 > 100

var result1:Bool = 250 > 100

//var result2 = 250 > 十0 ? 250 : 100 // 三.0之后不协助了

//var result2 = 250 > 拾0 ? 250 : 100 // 3.0从此不帮忙了

print(result1)

print(result1)

 

 

/*

/*

 逻辑运算符,基本用法和OC同样,
唯一要注意的是Swift中的逻辑运算符只可以操作Bool类型数据,
而OC能够操作整形(非0即真)

 逻辑运算符,基本用法和OC同样,
唯一要留心的是斯维夫特中的逻辑运算符只好操作Bool类型数据,
而OC能够操作整形(非0即真)

 !  && ||

 !  && ||

*/

*/

var open = false

var open = false

if !open

if !open

{

{

    print(“打开”)

    print(“打开”)

}

}

 

 

var age = 20

var age = 20

var height = 180

var height = 180

var weight = 60

var weight = 60

if (age > 25 && age < 40 && height > 175) || weight>50

if (age > 25 && age < 40 && height > 175) || weight>50

{

{

    print(“ok”)

    print(“ok”)

}

}

 

 

/*

/*

 区间

 区间

 闭区间: 包括区间内全数值  a…b 例如: 1…5

 闭区间: 包蕴区间内有着值  a…b 例如: 一…伍

 半闭区间: 蕴含头不包括尾  a..<b  例如: 一..<伍

 半闭区间: 包蕴头不包涵尾  a..<b  例如: 一..<伍

 注意: 1.Swift刚出来时的写法是 a..b

 注意: 1.Swift刚出去时的写法是 a..b

 贰.区间只好用于整数, 写小数会有标题

 二.区间只好用于整数, 写小数会不符合规律

 应用场景: 遍历, 数组等

 应用场景: 遍历, 数组等

*/

*/

for i in 1…5

for i in 1…5

{

{

    print(i)

    print(i)

}

}

 

 

for i in 1..<5

for i in 1..<5

{

{

    print(i)

    print(i)

}

}

 

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website