Swift复习(一)基本语法和特性(一)

2024-05-01  本文已影响0人  默默_David

一、Swift发展史

Swift 2.0

Swift 3.0

Swift 4.0

Swift 5.0

二、Swift和OC的比较

编程范式

类型安全

值类型增强

枚举增强

泛型

协议和扩展

函数和闭包

三、swiftc--强大的命令行工具

llvm编译过程.jpg swift编译过程.jpg

swiftc常用命令

四、REPL

  swift build      Build Swift packages
  swift package    Create and work on packages
  swift run        Run a program from a package
  swift test       Run package tests
  swift repl       Experiment with Swift code interactively

操作:

五、Playground

六、声明变量和常量

类型标注

let a,b,c : Int
let x = 1,y = 1.1,z = "zzz"
a = 10
b = 11
c = 12
print("a = \(a),b = \(b),c = \(c)")
print("x = \(x),y = \(y),z = \(z)")

/*
a = 10,b = 11,c = 12
x = 1,y = 1.1,z = zzz
*/

OC中定义常量常用方法:1.宏定义 2.const 3.类中属性设置为readonly(如果继承重写会失效)

常量和变量命名

打印print 和字符串插值

使用\(插值)添加字符串插值,如"a\(b)d"

七、Swift中的数值类型

整数

OC中有char、short、int、long、NSInteger类型,分别对应8 、 16 、32 、 64位整形,无符号类型一般为在前面加上unsigned
Swift中的Int对应于OC的NSInteger,在32位CPU为32位,在64位CPU为64位

浮点类型

OC中除了有来自于C的float、double外,还有CGFloat,CGFloat在32位CPU为32位,在64位CPU为64位

数值范围.jpg

Bool

OC中有0为假,非0为真的概念,Swift中没有

类型别名

// 声音采样
typealias AudioSample = UInt8
let sample: AudioSample = 32

八、元组(Tuple)

元素命名

let error = (statuCode: 404, errorMsg: "服务器在这个路径找不到指定资源")
print(error.statuCode) //404
print(error.1) //服务器在这个路径找不到指定资源

Tuple修改

Tuple分解

let error = (404, errorMsg: "服务器在这个路径找不到指定资源")
let (statuCode,errorMsg) = error
print(statuCode)
print(errorMsg)

let (_,errorMsg1) = error
print(errorMsg1)

九、Optional的使用

为什么需要Optional

Optional

可以通过给可选变量赋值一个nil来将之设置为没有值

Optional-If语句以及强制展开

let a: Int?
//a!//expression resolves to an unused variable a!
a = 10
if let a = a{
    print(a)
}

Optional-绑定

Optional-隐式展开

Optional-可选链

let a: String? = "abcdef"
let count = a?.count
if let count = count{
    let lastIndex = count - 1
    print(lastIndex) // 5
}

十、Optional的原理

Optional-实现探究

public  enum Optional<Wrapped> : ExpressibleByNilLiteral {
  case none
  case some(Wrapped)
  
  @inlinable public var unsafelyUnwrapped: Wrapped { get } 
}
// 使用Optional枚举来定义可选值
// 和使用String?定义的一模一样
let a: Optional<String> = "abcdef"
let a: Optional<String> = "abcdef"
let count = a.unsafelyUnwrapped.count
print(count) // 6

十一、创建和初始化字符串

初始化字符串

var emptyString = ""
var anotherEmptyString = String()
if (emptyString.isEmpty){
    print("这个字符串是空的")
}

字面量

多行字面量

字符串里的特殊字符

扩展字符串分隔符(Raw String)

let str = #"Line 1\nLiine 2"#
let str1 = ##"Line 1\#nLiine 2"##
let str2 = ###"Line 1\###nLiine 2"###

print(str)
print(str1)
print(str2)

/*
Line 1\nLiine 2
Line 1\#nLiine 2
Line 1
Liine 2
*/

十二、字符串的常见操作

字符串的可变性

字符串是值类型

操作字符

字符串插值

print(#"Write a interpolated string in Swift using \(multiplier)."#)
print(#"6 times 7 is \#(6 * 7)."#)
/*
Write a interpolated string in Swift using \(multiplier).
6 times 7 is 42.
*/

十三、如何使用索引访问和修改字符串

字符串索引

let string = "abcdefg"
print(string[string.startIndex]) // a 
//print(string[1])//报错
print(string[string.index(before:string.endIndex)]) // g
print(string[string.index(after:string.startIndex)]) // b
print(string[string.index(string.startIndex,offsetBy:3)]) // d
print(string[string.index(string.endIndex,offsetBy:-3)]) // e

插入

var string = "abcdefg"
string.insert("x",at:string.index(string.startIndex,offsetBy:2))
print(string)//abxcdefg
string.insert(contentsOf:"12345",at:string.index(string.endIndex,offsetBy:-2))
print(string)//abxcde12345fg

删除

var string = "abcdefg"
string.remove(at: string.index(string.startIndex,offsetBy:2))
print(string)//abdefg
string.removeSubrange(string.index(string.endIndex,offsetBy:-4)..<string.index(string.endIndex,offsetBy:-2))
print(string)//abfg

十四、子字符串、字符串比较

子字符串

let string = "abcdefg"
let index = string.index(of: "e") ?? string.endIndex
let beginning = string[..<index]
let newString = String(beginning)
print(beginning) // abcd
print(beginning is String) // false
print(beginning is Substring)  // true
print(newString) // abcd
print(newString is String) // true
print(newString is Substring) // false

字符串比较

let string = "abcdefg"
let string1 = "abcdefghijk"
print(string == string1) // false
print(string.hasPrefix("abcd")) // true
print(string1.hasPrefix("abcd")) // true
print(string.hasSuffix("efg")) // true
print(string1.hasSuffix("hijk")) // true
上一篇 下一篇

猜你喜欢

热点阅读