Swift

Swift5.0基础

2020-02-18  本文已影响0人  Arthur澪

温馨提示:本文记录的知识点兼容Swift5.0

在 Swift 语言当中,一行代码就是一个完整的程序。
不用编写main函数,Swift将全局范围内的首句可执行代码作为程序入口。

一句代码尾部可以省略分号(;)
多句代码写到同一行时必须用分号(;)隔开。

打印

var badg = 12;  
var number = 22;        
// 使用  \(xxxx)进行插值
print("I am:\(number) He is: \(badg)")
print("I am :", badg, "you are:", number )

使用 let来声明一个常量。不需要修改的,尽量定义成let
使用var来声明一个变量。
值不要求在编译时期确定,但使用之前必须赋值1次。

常用数据类型:

Bool、Float、Double、String、Character
Array、Dictionary、Set
枚举类型Operation

Swift 的 String 和 Character 类型是完全兼容 Unicode 标准的。 Unicode是一个用于在不同书写系统中对文本进行编码、表示和处理的国际标准。它使你可以用标准格式表示来自任意语言几乎所有的字符,并能够对文本文件或网页这样的外部资源中的字符进行读写操作。

// 字符串的长度
let lentgh = string0.count
// 使用 + ,字符串拼接
var str0 = "I Love" + "You"
// 使用 == 进行字符串的比较
if str1 == str2 {
  
}
// 判断字符串是否为空
if str0.isEmpty {
  
}
// 遍历每一个字符
for cha in String0 {
    print(cha)
}
// 字符串转 数字
let numString = "123"
let num = Int(numString)   // num 被推测为类型 "Int?", 或者类型 "optional Int"
let array = [1,2,3,4,5,6,7,8,9]
let num0 = array[0]  // 或 array.first
// 声明数组属性
var datalist : [string] = []
var someInts = [Int]()
var arr0 : Array<Int> = Array()
// 重复元素的数组
var threeDoubles = Array(repeating: 0.0, count: 3)
// 遍历数组
for num in arr0 {
    print(num)
}
// 判断数组是否为空
if arr0.isEmpty {
   //...
}
// 是否包含某元素
if arr.contains("x") {
}
// 添加 删除元素
arr0.append("2")   //在数组的末尾添加
arr0.append(contentsOf: ["3","4"])
arr0.insert("2", at: 1)
arr0.insert(contentsOf: ["3","4"], at: 0)
arr0.remove(at: 2)

// 数组可以相加(元素类型需一致)
var arr3 = arr1 + arr2

// [Key: Value]形式 定义 确定类型的 字典
var dic = [Int: String]()

let dic = [:]   // 空字典
let dict = ["age":18, "height":100, "width":200]
// 键值类型 确定
var dic: [String: String] = ["YYZ": "Toronto", "DUB": "Dublin"]

// 键值对 个数
dic.count
// 字典是否为空
if dic.isEmpty {
}
// 更改
let dic1 = dic0.updateValue("Dublin", forKey: "DUB")
// 删除
dic["APL"] = nil
let dic1 = dic0.removeValue(forKey: "DUB")
// removeValue方法 在键值对存在的情况下,会移除该键值对并返回被移除的值;
// 在没有对应值的情况下,返回 nil:

// 遍历
for (key, value) in dic {
    print("\(key): \(value)")
}
// 抽离 键值
let arr1 = [String](dic0.keys)  // 返回数组
let arr2 = [String](dic0.values)

// 排序
dic.keys.sorted()

元组(tuples)

把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。

// 定义元组,通过.0 或 .1来访问内部属性
let http404Error = (404,"网页不存在")
print(http404Error.0, http404Error.1)

// 定义元组,分别给元组内参数赋值,通过参数进行访问
let (statusCode, errorString) = (404,"网页不存在")
print(statusCode, errorString)

// 使用_,表示不赋值
let (statusCode1, _) = (404,"网页不存在")
print(statusCode1)

// 通过元组内部参数进行访问
let http200Status = (statusCode:200, statusString:"请求成功")
print(http200Status.statusCode, http200Status.statusString)

按照Swift标准库的定义,Void就是空元组`()

流程控制语句

var number = 22
if number == 0 {
  print("ok!")
}else{

} 

guard let location = "xxx" else {
// 如果条件不为真,  则执行 else 从句中的代码。        
}

while number<3 {
  print("ok!")  
}

repeat {
  print("ok!")  
}while number<3

// for-in循环
let arr = ["Anna", "Alex", "Brian", "Jack"]
for name in arr {
    print("Hello, \(name)!")
}
let dic = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in dic {
// 字典的内容理论上是无序的,遍历元素时的顺序是无法确定的
    print("\(animalName)s have \(legCount) legs")
}

区间运算

闭区间[a,b]的表示:a...b
半开区间[a,b)的表示:a..<b
单侧区间[a,∞)的表示a...

区间类型ClosedRange、Range、PartialRangeThrough

let rang1: ClosedRange<Int> = 1...3;
let rang2: Range<Int> = 1..<3
let rang3: PartialRangeThrough<Int> = ...3

带间隔的区间
[0,2,4,6...100]的表示stride(from: 0, to: 100, by: 2)

for-in循环

//默认num是let 类型,可以省略
for num in 1...10{
    print(num)
}

//如果要修改 num 的值,需要更改为var类型
for var num in 1...10 {
    num += 100
    print(num)
}
//不需要用到 num ,可以使用_缺省
for _ in 1...10 {
    print("hello,world")
}

设置间隔的函数:stride(from:to:by:)
for tickMark in stride(from: 0, to: 60, by: 5) {
    // 每5分钟渲染一个刻度线(0, 5, 10, 15 ... 45, 50, 55)
}

continue语句,使本次循环结束,重新开始下次循环。
break 语句会 立刻结束整个控制流的执行。

区间运算与数组

let arr2 = ["aaa", "bbb", "ccc", "ddd"]
for str in arr2[1...2] {
    print(str)    //打印了bbb和ccc
}

switch语句

case、default后面不能写{}
case之后不必接break
每一个case必须包含至少一条语句
case允许同时判断多个条件
支持Character、String类型
使用fallthrough可以实现贯穿效果

let name = "c"
switch name {
case "c", "d":   // 可以合并多个条件
    print("ok")
case "a":
    print("ok")
default:
    break
}

可配合区间、元组

let num = 12
switch num {
case 1...10:
    print("ok")
case 11...20:
    break
default:
    break
}
let point = (1, 1)
switch point {
case (0, 0):
    print("the origin")
case (_, 0):
    print("on the x")
case (0, _):
    print("on the y")
case (-2...2, -2...2):
    print("inside box")
default:
    print("outside box")
}

值绑定:如果有一个值相同,另外一个则会自动绑定

let point1 = (1, 1)
switch point1 {
case (let x, 0):
// 将匹配一个y为 0 的点,并把这个点的横坐标赋给临时常量 x;
// 临时常量可在该case分支 里使用
    print("在x轴")
case (0, let y):
    print("在y轴")
case (let x, 1):
    print("在x轴") 
default:
    print("outside of the box")
}

where关键字

用于判断某个条件满足,才会执行。

for num in 1...100 where num % 10 == 0 {
    print(num)
}
let point2 = (1, 2) 
// 判断point2的两个元素是否相等
switch point2 {
case let (x, y) where x == y:
    print("ok")
case let (x, y) where x != y:
    print("no")
default:
    break
}

关键字 typealias
typealias用来给类型 起别名

typealias Byte  = Int8
typealias Short = Int16
typealias Long  = Int64

typealias Date = (year: Int, month: Int, day: Int)
func test(_ date: Date) {
    print(date.0)
    print(date.year)
}
test((2011, 9, 10))
上一篇下一篇

猜你喜欢

热点阅读