首页 >Swift

Swift3.0基础语法(一)——情人节特辑

2017-08-28 15:34 编辑: 四门三连 分类:Swift 来源:随风奔跑的鸿牛

Swift自从更新到3.0版本之后,语法上就已经变得比较稳定了,未来Swift代替OC成为iOS主力开发语言,是必然的趋势,我觉得是时候上车了,借此2017年情人节到来之际,和我一起学习Swift3.1的基础语法吧。

var和let

在Swift中,我们定义一个常量和变量分别是通过letvar来完成。

Swift中语法比较严谨,如果通过let来定义一个常量,那就是代表不可以随意改变它的值,想要改变就必须用var来定义。

var str = "Hello, playground"
str = "Hello world"
var a = 12
var b = 11
var c = a + b
c = 24
let a1 = 12
let b1 = 12
let c1 = a1 + b1

条件语句

if...else

if a == 11
{
    print(6666)
}
else if b == 12
{
    print(66666666)
}
else if c == 22
{
    print("niniubi")
}

guard

1.guard 必须使用在函数里面

2.guard 语句必须带有else语句,它的语法如下:

<1>当条件表达式为true时,跳过else语句中的内容,执行语句组内容

<2>条件表达式为false时,执行else语句中的内容,跳转语句一般是returnbreakcontinuethrow

接下来看if...else 和 guard的对比:

从代码中可以看出,guard的代码可读性更好,而且不需要像if...else那样去嵌套,老司机应该都见识过新手写的if...else连续嵌套,真是可怕。

//if...else
func check (age : Int , hasCard : Bool)
{
    if age >= 18 {
        if hasCard {
            print("老司机,开车呗")
        } else
        {
            print("回家拿卡去")
        }
    } else
    {
        print("未成年")
    }
}
//guard
func checkCard(age:Int,hasCard:Bool)
{
    guard age >= 18 else {
        print("未成年")
        return
    }
    
    guard hasCard  else {
        print("回家拿卡去")
        return
    }
    
    print("老司机,开车呗")
}
check(age: 18, hasCard: true)
checkCard(age: 19, hasCard: false)
打印结果:
老司机,开车呗
回家拿卡去

switch

首先看switch的一般使用,跟OC很相似:

var c1 = 11.111
switch c1 {
case 11.1:
    print(666)
default:
    print("nimade")
}

switch中,fallthrough的用法:

可以看到,每个case条件下,都可以print多个语句case条件也可以设置多个,如果case条件下,没有任何语句,需要写上break,不然就会报错。

let a1 = 11
/* 
 fallthrough 穿透
 */
switch a1 {
case 1:
    print(6666)
case 2:
    print(5555)
case 10,11:
    print("right")
    print("ni66666")
    fallthrough
default:
    print("tmd")
}
打印结果:
right
ni66666
tmd

switch的特殊用法

首先讲讲Swift中如何设置区间范围range,如下代码所示:

//闭区间
let range = 0...10
let range2 = 3...6
//半开半闭区间
let range = 0..<10
let range2 = 3..<6
//判断区间是否包含了某个元素
range.contains(2)
range2.contains(10)
//交集,范围必须为同一个类型
range.clamped(to:range2)

switch结合range的使用,如下代码:

func levelScore(score:Double)
{
    switch score {
    case 0..<60:
        print("不及格")
    case 60..<80:
        print("一般")
    case 80..<90:
        print("良好")
    case 90...100:
        print("优秀")
    default:
        print("xxx")
    }
}
levelScore(score: 100)

元组:一组元素,元组匹配,通过switch来判断

let point = (10,0)
switch point {
case (0,0):
    print("坐标在原点")
case (0...10,10...20):
    print("坐标的x和y在1-20之间")
case (var x,var y)://值绑定
    print("坐标的x在x轴上",x,y)
default:
    print(666)
}
打印结果:
坐标的x在x轴上 10 0

根据条件进行值绑定

var point2 = (100,10)
switch point2 {
case var(x1,y1) where x1 > y1 :
    print("x1 = \(x1) y1 = \(y1)")
default:
    print("")
}
打印结果:
x1 = 100  y1 = 10

for循环

//:for循环:区间写法
for i in 0..<10
{
    print(i)
}
//下划线代表忽略的意思
for _ in 0..<10
{
    print(666)
}

while 和 dowhile

Swift中,dowhile 是用repeat来代替。

var i = 10
while i > 0 {
    i -= 1
    print(i)
}
repeat{
    i += 1
    print(i)
} while i < 10

字符串

首先看看字符串的基本使用:

var str1 = "Homezzh"
str1 = "hmezzh"
//遍历字符串
for o in str1.characters
{
    print(o)
}
打印结果:
h
m
e
z
z
h

字符串之间的拼接:

var str1 = "123我"
var str2 = "666"
//拼接字符串,以下几种方式都可以
str1.appending(str2)
str1.append(str2)
str1 + str2
let num = 10
str1 + "\(num)"
"\(str1)\(num)"
打印结果:
123我666
123我666
123我666
123我66610

字符串的截取:

var str5 = "https://www.baidu.com"
//1.设置开始和结束的字符串位置
let startIndex = str5.startIndex
let endIndex = str5.endIndex
var fromIndex = str5.index(after: startIndex)
//从左边首位开始,向右数第5位开始截取
fromIndex = str5.index(startIndex, offsetBy: 5)
//从最后一位开始,向左数第3位开始截取
let fromIndex2 = str5.index(endIndex, offsetBy: -3)
str5.substring(from: fromIndex2)
print(str5.substring(from: fromIndex2))
str5.substring(from: fromIndex)
print(str5.substring(from: fromIndex))
打印结果:
com
://www.baidu.com
//2.设置区间range来截取字符串,只能设置半开半闭区间
let range5 = fromIndex..

字符串的替换:

let replaceRange = startIndex...fromIndex2
str5.replaceSubrange(replaceRange, with: "https://www.baihu.com")

数组

数组的基本使用,数组分为两种:可变不可变

如果想要在数组中添加各种类型的数组元素,在定义数组时,设定类型为Any

let arr1 = [1,2,3]
var arr2 : Array = [1,2,3,1.1]
var arr3 : [Any] = [4,5,6,"666"]

数组的增删改查

var arr2 : Array = [1,2,3,1.1]
var arr3 : [Any] = [4,5,6,"666"]
//:增
//添加元素
arr2.append(4)
//插入元素
arr3.insert(5, at: 4)
//增加元素
arr3 += [7,8,9]
print(arr3)
打印结果:[4, 5, 6, "666", 5, 7, 8, 9]
//:删
//删除元素
arr3.remove(at: 1)
print(arr3)
打印结果:[4, 6, "666", 5, 7, 8, 9]
//删除首位
arr3.removeFirst()
print(arr3)
打印结果:[6, "666", 5, 7, 8, 9]
//删除最后一位
arr3.removeLast()
print(arr3)
打印结果:[6, "666", 5, 7, 8]
//删除前后各两位
arr3.removeLast(2)
arr3.removeFirst(2)
print(arr3)
打印结果:[5]
//删除一个区间的元素
arr3.removeSubrange(1...2)
print(arr3)
打印结果:[5, 7]
//:改
//设置为any就可以放各种类型的数组元素
var arr4 : [Any] = [1, 2, 3, "666"]
arr4[0] = 4
arr4[1] = 5
arr4[2] = 6
arr4[2] = "555"
//:查
arr4.first
arr4.last
var arr5 = [1,2,3]
arr5.max()
arr5.min()
var arr6 = ["1.1","1.2","1.3"]
arr6.min()
arr6.max()
print(arr4)
打印结果:[4, 5, "555", "666"]

数组的遍历

var array = [1,2,3,4,4,4,4]
//1.一般的场景遍历
for i in 0..

字典

字典:

1.字典允许按照某个键来访问元素

2.字典是由两部分集合构成的,一个是key集合,一个是value集合

3.键集合是不能有重复元素的,而值集合是可以重复的,key和value是成对出现的

4.swift字典类型是Dictionary,也是一个泛型集合

var dic: [String : Any] = ["123" : 1, "abc" : 2]
dic["b"] = 2
dic
dic = ["a" : 1]
dic["a"] = 2
dic["b"] = 3
dic
//直接修改数值,如果没有发现相应的key,增加键值对,如果有,修改
dic.updateValue("3", forKey: "a")
print(dic)
//删除
dic.removeValue(forKey: "aa")
print(dic)

字典的遍历:

var dic: [String : Any] = ["a" : 3, "b" : 3]
let keys = dic.keys
for k in keys
{
    print(k)
}
let values = dic.values
for v in values
{
    print(v)
}
for (key,value) in dic{
    print(key,":",value)
}

字典的合并:有两种方式

//字典的合并:把dic2 里面所有的键值对,添加到dic
for (key , value) in dic2
{
    dic[key] = value
}
print(dic)
//分类扩展
extension Dictionary
{
    static func +(dic: Dictionary, dic2: Dictionary) -> Dictionary
    {
        var result = dic
        for(key , value) in dic2
        {
            result[key] = value
        }
        return result
    }
}
let d1: [String: Any] = ["a":1]
let d2: [String: Any] = ["b":2]
let d3 = d1 + d2

元组

元组:Swift中特有的,oc中并没有相关类型

它是一种数据结构,在数学中应用广泛

类似于数组或者字典

可以用于定义一组数据

组成元组类型的数据可以称为“元素”

//定义一个人的信息
let yuanzu = ("zs",18, 100)
yuanzu.0
yuanzu.1
yuanzu.2
打印结果:
"zs"
18
100

元组数组字典的对比:

//数组里面的元素,一般都是分散的个体
let array2 : [Any] = ["a", 1, "b", "c"]
array2[0]
array2[1]
array2[2]
//字典
let dic5: [String: Any] = ["name": "zs", "age": 18, "score": 100]
dic5["name"]
dic5["age"]
dic5["score"]
//一组元素,元素与元素之间一般都是有某些关联的
let yuanzu2 = (name: "zs", age: 18, score: 100)
yuanzu2.name
yuanzu2.age
yuanzu2.score
let (name,age,score) = ("zs",18,100)
name
age
score
//遍历数组中也用到元组
let array3 = [1,2,3]
for 元组 in array3.enumerated()
{
    print(元组.offset,元组.element)
}

元组也是有类型的:

func test(canshu:(String , Int))
{
    print(canshu.0,canshu.1)
}
test(canshu: ("a",2))

借助元组,可以让一个函数,可以返回多个值

func test2() -> (String,Int,Double)
{
    return ("zs",18,1)
}
let p = test2()
p.0
p.1
p.2
let (name1,age1,score1) = test2()
name1
age1
score1

未完待续......

搜索CocoaChina微信公众号:CocoaChina
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
我要投稿   收藏文章
上一篇:再谈 Swift 换肤功能
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0

综合评论

相关帖子

sina weixin mail 回到顶部