首页 > 分享 > Swift5入门

Swift5入门

文章目录 Swift语言基础1.1 Swift 和 Playground简介1.2 常量、变量和数据类型数据类型类型安全和类型推断 1.3 运算符1.4 控制流程1.5 循环forfor-inwhile 1.6 集合数组字典 1.7 字符串1.8 函数1.9 枚举1.10 类构造函数和析构属性和方法继承计算属性属性观察器 1.11 结构体定义拷贝 1.12 协议(接口)1.13 高级可选链和类型转换闭包泛型 完整的Playground项目更新记录

Swift语言基础

更新时间:2020-03-24
Swift版本:Swift 5

1.1 Swift 和 Playground简介

/* 1.1 Swift 和 Playground简介 * 使用XCode新建playground项目,复制一下代码查看效果! */ var str = "Hello, playground" var a = 12,b=21 print(str) print(a+b) 1234567

1.2 常量、变量和数据类型

数据类型

let name = "John" // 常量 var age = 20 // 变量 let printStr = "name:(name),(age)" // 字符串插值 // 定义一个类 struct Person{ let firstName: String let lastName: String func sayHello() { print("Hello there!My name is (firstName) (lastName).") } } // 初始化类的对象实列 let person = Person(firstName: "xu", lastName: "yingchun") // 字面量 person.sayHello()

1234567891011121314151617 类型安全和类型推断

let playerName = "name" var playerScore = 1000 var numberWitchDicimals = 17.5 var gameOver = false // playerName = playerScore // playerScore = numberWitchDicimals // Will be flagged for mismatched type, will not compile. let cityName: String = "San Francisco" let pi: Double = 3.1415927 let number: Double = 3 print(number) 12345678910111213

1.3 运算符

// 分配值 var shoeSize = 8 shoeSize = 9 // Reassigns shoeSize to 9 // 基本算数 var opponentScore = 3 * 8 // opponentScore has a value of 24 var myScore = 100 / 4 // myScore has a value of 25 var totalScore = opponentScore * myScore myScore += 3 myScore -= 5 myScore *= 2 myScore /= 2 var x = 2,y = 3,z = 5 x + y * z // Equals 17 let a1 = 3,b1 = 0.1415927 let pi1 = Double(a1) + b1 // 数值型类型转换

1234567891011121314151617

1.4 控制流程

// if条件 let temperature = 100 if temperature >= 100 { print("The water is boiling.") }else if temperature < 0 { print("The water is cold.") }else{ print("The water is not boiling.") } // switch语句 let numberOfWheels = 2 switch numberOfWheels{ case 1: print("Unicycle") // 不需要break,会直接跳出,如果要向下执行,添加fallthrough关键字 case 2: print("Bicycle") default: print("That's a lot of wheels!") } // switch语句支持字符串 let character = "z" switch character{ case "a","e","i","o","u": print("This character is a vowel.") default: print("This character is a consonat.") } // switch语句支持区间匹配 let distance = 100 switch distance { case 0...9: print("Your destination is close.") case 10...99: print("Your destination is a medium distance from here.") default: print("Are you sure you want to travel this far?") }

12345678910111213141516171819202122232425262728293031323334353637383940

1.5 循环

for

// Swift5不支持for循环?,作者使用for-in代替之 1

for var i:=0;i<10;i++{
print(i)
}

for-in

for index in 1..<5 { print("This is number(index)") } let names2 = ["Joseph", "Cathy", "Winston"] for item in names2 { print("Hello (item)") } let vehicles = ["unicycle": 1, "bicycle":2] for (key,value) in vehicles { print("A (key) has (value) wheels") } 1234567891011 while

var numberOfLives = 3 var stillAlive = true while stillAlive { numberOfLives -= 1 if numberOfLives == 0{ break } } 123456789

1.6 集合

数组

var names: [String] = ["Anne","Gray"] var numbers = [1, -3, 24, 114] if numbers.contains(24){ print("There is a 24") } numbers[1] = 23 numbers.append(2) // 追加 numbers+=[1,3] // 一次追加多个元素 numbers.insert(31, at: 0) numbers.remove(at: 0) let array1 = [1,2,3] let array2 = [4,5,6] let arrayAll = [array1,array2] // [[1,2,3],[4,5,6]] // 二维数组 12345678910111213 字典

var myDictionary = [String:Int]() var myDictionary2 = Dictionary<String,Int>() myDictionary["Oli"] = 399 //添加 if let oldValue = myDictionary.updateValue(200, forKey: "Oli") {//更新 print("Richard's old value was (oldValue)") } var scores = ["Richard": 500, "Luke": 100] //访问字典 let players = Array(scores.keys) // ["Richard", "Luke"] let points = Array(scores.values)// [500, 100] if let myScore = scores["Luke"] { print(myScore) }else{ print("Not find") } 1234567891011121314

1.7 字符串

let greeting = "Hello "world"" var myString = "" if myString.isEmpty { print("The string is empty") } // 串联和插值 myString = greeting + "yes" let age1 = 30 let name1 = "Rick" print("(name1) is (age1+5) years old") // 字符串相等 if myString != greeting { print("The are not the same") } if greeting.contains("Hello") { print("Making an introduction") } print("the greeting len=(greeting.count)")

123456789101112131415161718

1.8 函数

func displayPi(){ print("3.1415927") } displayPi() // 调用 func triple(value: Int){ let result = value * 3 print("If you multiple (value) by 3,you'll get (result).") } triple(value: 20) // 带参数 func triple2(_ value: Int){ triple(value: value) } triple2(10) // 自变量标签,可省略参数标签 // 默认参数值和 // 返回多个值 func multiple(_ firstNumber: Int, secondNumber: Int = 10) -> (a: Int,b: Int){ return (firstNumber * secondNumber , secondNumber) } var multipleResult = multiple(2) print("Return=(multipleResult) a=(multipleResult.a) b=(multipleResult.b)")

1234567891011121314151617181920212223

1.9 枚举

enum MsgType{ case Text case Image case Video case File } 123456

1.10 类

构造函数和析构

var stringInit = String.init() // "" var integerInit = Int.init() // 0 class Temperature{ var celsius: Double // 带一个参数的构造函数 init(celsius: Double){ self.celsius = celsius } // 可以重载,和java不同,可以通过参数名字区分开而不是参数数量 init(fahrenheit: Double){ self.celsius = (fahrenheit - 32) / 1.8 } deinit{ print("对象被消耗") } } var boiling = Temperature(fahrenheit: 212.0) boiling = nil // 不再指向原来的对象,GC帮助我们自动销毁该对象

12345678910111213141516171819202122 属性和方法

class Person{ let maxAge: 200 // 常量 var name: String // 变量 static var numberOfPerson = 0 // 类(静态)属性 // 对象(实例)方法 func walk(){ } // 类(静态)方法,使用class修饰 class func convert(){ } } 123456789101112131415 继承

class Scientist{ func doSomeThing() { } // final 修饰的属性和方法,子类不能重写 final func finalMethod(){ } } class Geologist: Scientist{ override func doSomeThing() { super.doSomeThing() // super调用父类方法 } } 1234567891011121314 计算属性

class Temperature2{ var celsius: Double var fahrenheit: Double{ get{ // 变量可读 return celsius * 1.8 + 32 } set{ // 变量可写 celsius = newValue / 1.8 } } } 1234567891011 属性观察器

struct StepCounter{ var totalSteps: Int = 0 { willSet{ print("About to set totalSteps to (newValue)") } didSet{ if totalSteps > oldValue{ print("Added (totalSteps - oldValue)") } } } } var stepCounter = StepCounter() stepCounter.totalSteps = 40 stepCounter.totalSteps = 100 123456789101112131415

1.11 结构体

定义

注意:
结构体是值类型,类是引用类型。

struct Car{ var make: String var year: Int = 0 func startEngine() {} func drive() {} } var firstCar = Car(make: "Ford", year: 2013) firstCar.startEngine() firstCar.drive() 12345678910 拷贝

var t1 = Temperature2(celsius: 2.0) var t2 = t1 t2.celsius = 10.0 // 拷贝结构体,所以不会影响原结构体的值,和“类”的不同之处,如果分不清,全部使用Class即可。 print(t1.celsius) 1234

1.12 协议(接口)

protocol CanFly { var mustBeSettable: Int { get set} // 必须实现可读可写的属性 class func someTypeMethod() // 类(静态)方法 func random() -> Double // 对象(实例)方法 } 123456

1.13 高级

可选链和类型转换

class Residence{ var numberOfRooms = 1 } class Person{ var residence: Residence? // 可为nil } let john = Person() let rootCount = john.residence!.numberOfRooms // 报错 // 正确的写法 if let roomCount = john.resindece?.numberOfRooms { print("房间数量为:(roomCount))") }else{ print("房间数量为空") }

12345678910111213141516 闭包

func compare(a: String, b: String) -> Bool{ return a > b } let namges = ["Bob","Alice","Barry","Ewa"] var reversed = sorted(names,compare) // 排序 println(reversed) // 闭包语法 //{(paremeters) -> returnType in // statements //} // 这里可省略compare方法的定义,更简洁 reversed = sorted(names,{(a: String, b: String) -> Bool in return a > b }) // 可放在一行,可读性不是很好,不是很推荐 reversed = sorted(names,{(a: String, b: String) -> Bool in return a > b })

1234567891011121314151617181920 泛型

struct Stack<T>{ var items = [T]() // 一个数组 mutating func push(item:T){ items.append(item) } mutating func pop() -> T{ return items.removeLast() } } var stackOfStrings = Stack<String>() // 初始化一个Stack<String>类型,注意类型是:Stack<String>,不是Stack stackOfStrings.push("a") stackOfStrings.push("b") print(stackOfStrings.pop())

12345678910111213141516

完整的Playground项目

import UIKit /* 1.1 Swift 和 Playground简介 * 使用XCode新建playground项目,复制一下代码查看效果! */ var str = "Hello, playground" var a = 12,b=21 print(str) print(a+b) /* 1.2 常量、变量和数据类型 */ // 数据类型 let name = "John" // 常量 var age = 20 // 变量 let printStr = "name:(name),(age)" // 字符串插值 struct Person{ let firstName: String let lastName: String func sayHello() { print("Hello there!My name is (firstName) (lastName).") } } let person = Person(firstName: "xu", lastName: "yingchun") person.sayHello() // 类型安全和类型推断 let playerName = "name" var playerScore = 1000 var numberWitchDicimals = 17.5 var gameOver = false // playerName = playerScore // playerScore = numberWitchDicimals // Will be flagged for mismatched type, will not compile. let cityName: String = "San Francisco" let pi: Double = 3.1415927 let number: Double = 3 print(number) /* 1.3运算符 */ // 分配值 var shoeSize = 8 shoeSize = 9 // Reassigns shoeSize to 9 // 基本算数 var opponentScore = 3 * 8 // opponentScore has a value of 24 var myScore = 100 / 4 // myScore has a value of 25 var totalScore = opponentScore * myScore myScore += 3 myScore -= 5 myScore *= 2 myScore /= 2 var x = 2,y = 3,z = 5 x + y * z // Equals 17 let a1 = 3,b1 = 0.1415927 let pi1 = Double(a1) + b1 // 数值型类型转换 /* 1.4 控制流程 */ let temperature = 100 if temperature >= 100 { print("The water is boiling.") }else if temperature < 0 { print("The water is cold.") }else{ print("The water is not boiling.") } let numberOfWheels = 2 switch numberOfWheels{ case 1: print("Unicycle") case 2: print("Bicycle") default: print("That's a lot of wheels!") } let character = "z" switch character{ case "a","e","i","o","u": print("This character is a vowel.") default: print("This character is a consonat.") } let distance = 100 switch distance { case 0...9: print("Your destination is close.") case 10...99: print("Your destination is a medium distance from here.") default: print("Are you sure you want to travel this far?") } /* 2.1字符串 */ let greeting = "Hello "world"" var myString = "" if myString.isEmpty { print("The string is empty") } // 串联和插值 myString = greeting + "yes" let age1 = 30 let name1 = "Rick" print("(name1) is (age1+5) years old") // 字符串相等 if myString != greeting { print("The are not the same") } if greeting.contains("Hello") { print("Making an introduction") } print("the greeting len=(greeting.count)") /* 2.2函数 */ func displayPi(){ print("3.1415927") } displayPi() func triple(value: Int){ let result = value * 3 print("If you multiple (value) by 3,you'll get (result).") } // 自变量标签,可省略参数标签 triple(value: 20) func triple2(_ value: Int){ triple(value: value) } triple2(10) // 默认参数值和返回多个值 func multiple(_ firstNumber: Int, secondNumber: Int = 10) -> (a: Int,b: Int){ return (firstNumber * secondNumber , secondNumber) } var multipleResult = multiple(2) print("Return=(multipleResult) a=(multipleResult.a) b=(multipleResult.b)") /* 2.3结构 */ struct Car{ var make: String var year: Int = 0 func startEngine() {} func drive() {} } var firstCar = Car(make: "Ford", year: 2013) firstCar.startEngine() firstCar.drive() //构造器 var stringInit = String.init() // "" var integerInit = Int.init() // 0 struct Temperature{ var celsius: Double init(celsius: Double){ self.celsius = celsius } init(fahrenheit: Double){ self.celsius = (fahrenheit - 32) / 1.8 } } var boiling = Temperature(fahrenheit: 212.0) //计算属性 struct Temperature2{ var celsius: Double var fahrenheit: Double{ return celsius * 1.8 + 32 } } //属性观察器 struct StepCounter{ var totalSteps: Int = 0 { willSet{ print("About to set totalSteps to (newValue)") } didSet{ if totalSteps > oldValue{ print("Added (totalSteps - oldValue)") } } } } var stepCounter = StepCounter() stepCounter.totalSteps = 40 stepCounter.totalSteps = 100 //拷贝 var t1 = Temperature2(celsius: 2.0) var t2 = t1 t2.celsius = 10.0 // 拷贝结构体,所以不会影响原结构体的值 print(t1.celsius) /* 2.4类与继承 */ class Scientist{ func doSomeThing() { } } class Geologist: Scientist{ override func doSomeThing() { } } /* 2.5集合 */ // 数组 var names: [String] = ["Anne","Gray"] var numbers = [1, -3, 24, 114] if numbers.contains(24){ print("There is a 24") } numbers[1] = 23 numbers.append(2) // 追加 numbers+=[1,3] // 一次追加多个元素 numbers.insert(31, at: 0) numbers.remove(at: 0) let array1 = [1,2,3] let array2 = [4,5,6] let arrayAll = [array1,array2] // [[1,2,3],[4,5,6]] // 二维数组 //字典 var myDictionary = [String:Int]() var myDictionary2 = Dictionary<String,Int>() myDictionary["Oli"] = 399 //添加 if let oldValue = myDictionary.updateValue(200, forKey: "Oli") {//更新 print("Richard's old value was (oldValue)") } var scores = ["Richard": 500, "Luke": 100] //访问字典 let players = Array(scores.keys) // ["Richard", "Luke"] let points = Array(scores.values)// [500, 100] if let myScore = scores["Luke"] { print(myScore) }else{ print("Not find") } /* 2.6循环 */ // for/for-in for index in 1..<5 { print("This is number(index)") } let names2 = ["Joseph", "Cathy", "Winston"] for item in names2 { print("Hello (item)") } let vehicles = ["unicycle": 1, "bicycle":2] for (key,value) in vehicles { print("A (key) has (value) wheels") } // while var numberOfLives = 3 var stillAlive = true while stillAlive { numberOfLives -= 1 if numberOfLives == 0{ break } }

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257

更新记录

2019.08.23 初稿2020.03.07 完善,增加目录和更多的注释

相关知识

【素描入门】素描入门基础教程
素描入门
养花入门(养花入门养什么花)
花草摄影入门
摄影技巧入门
摄影入门技巧【花卉产品摄影入门技巧】
spring框架入门经典讲解
花艺入门学习方法
钩针编织基础入门
欧洲文化入门

网址: Swift5入门 https://m.huajiangbk.com/newsview1787046.html

所属分类:花卉
上一篇: swift编程入门(非常详细)从
下一篇: iOS开发新手教程:Swift语