Swift语言的基础详解

Swift是由苹果公司推出的一种面向对象的编程语言,它在保持Objective-C强大的可扩展性、高效性和互操作性的同时,提供了更具有现代感的语法和特性。Swift易于学习和使用,而且非常适合开发iOS、iPadOS、watchOS、tvOS等平台上的应用程序。本文将为大家详细介绍Swift语言的基础知识、常用方法以及一些实例。

Swift基础知识

变量和常量

在Swift中,使用var关键字定义变量,使用let关键字定义常量。变量是一种可以在运行时更改其值的存储空间,常量的值在定义后不能更改。

变量和常量的命名应该以字母或下划线开头,不能以数字或其他特殊字符开头。

示例:

```

var age = 18

age = 19 // 将age变量的值修改为19

let name = "Tom"

name = "Jerry" // 尝试将常量name的值修改为"Jerry",会报编译错误

```

数据类型

Swift中的数据类型可以分为基本数据类型和高级数据类型两种,其中:

- 基本数据类型包括字符串(String)、整型(Int)、浮点型(Double和Float)、布尔型(Bool)等;

- 高级数据类型包括数组(Array)、字典(Dictionary)、集合(Set)、元组(Tuple)、枚举(Enum)等。

除此之外,Swift还支持可选类型(Optional)。可选类型表示一个值可能存在,也可能不存在,可以用来解决变量或常量值为空的情况。

示例:

```

var str: String = "Hello, Swift!" // 定义字符串类型变量

var age: Int = 18 // 定义整型变量

var price: Double = 3.14 // 定义双精度浮点型变量

var isFinished: Bool = false // 定义布尔型变量

var optionalValue: String? = nil // 定义一个可选类型变量

```

运算符

Swift支持多种运算符,包括算术运算符、比较运算符、赋值运算符、逻辑运算符等。

算术运算符:+, -, *, / 表示加减乘除。

比较运算符:==, !=, >, >=, <, <= 表示等于、不等于、大于、大于等于、小于、小于等于。

赋值运算符:= 表示将右侧的值赋给左侧的变量或常量。

逻辑运算符:&&, ||, ! 表示与、或、非。

示例:

```

var a = 10, b = 20

var c = a + b // 30

var d = a > b // false

if a >= 10 && b <= 20 {

// ...

}

```

条件语句

Swift中的条件语句包括if语句、else语句和switch语句。其中if和else语句用于判断某个条件是否成立,switch语句用于从多个条件分支中选择一个执行。

示例:

```

let score = 85

if score > 60 {

print("及格了")

} else {

print("不及格")

}

switch score {

case 60..<70:

print("及格")

case 70..<80:

print("良好")

case 80..<90:

print("优秀")

case 90...100:

print("满分")

default:

print("不及格")

}

```

循环语句

Swift中的循环语句包括for-in循环、while循环和repeat-while循环。

for-in循环用于遍历数组或字典中的元素,while和repeat-while循环用于重复执行一段代码,直到某个条件不成立为止。

示例:

```

let arr = ["apple", "banana", "pear"]

for fruit in arr {

print(fruit)

}

var i = 0

while i < 10 {

i += 1

print(i)

}

repeat {

i -= 1

print(i)

} while i > 0

```

函数

Swift中的函数使用func关键字定义,可以有参数和返回值。函数的参数可以有默认值,也可以使用可变参数和inout参数。

示例:

```

func sayHello(to name: String) -> String {

return "Hello, \(name)!"

}

print(sayHello(to: "Tom")) // 输出 "Hello, Tom!"

```

数组

在Swift中,使用数组来存储一组有序的元素,数组的元素可以是任意类型。数组的索引从0开始,可以使用下标访问数组中的元素。

示例:

```

var arr: [String] = ["apple", "banana", "pear"]

arr.append("orange") // 在数组末尾添加一个元素

arr.insert("watermelon", at: 0) // 在数组第一个位置插入一个元素

arr.remove(at: 2) // 删除数组中索引为2的元素

print(arr[0]) // 输出 "watermelon"

```

字典

在Swift中,使用字典来存储一组键值对的元素,键和值可以是任意类型。字典的键是唯一的,可以使用下标或者for-in循环来访问字典中的元素。

示例:

```

var dict: [String: Any] = ["name": "Tom", "age": 18, "gender": true]

dict["height"] = 170 // 添加一个键值对到字典中

dict.removeValue(forKey: "gender") // 根据键删除字典中的一个键值对

print(dict["name"]) // 输出 Optional("Tom")

```

集合

Swift中的集合包括Set和NSOrderedSet两种类型,它们用于存储一组无序的、唯一的元素。

示例:

```

var set: Set = ["apple", "banana", "pear"]

set.insert("watermelon") // 往集合中添加一个元素

print(set.contains("banana")) // 输出 true

```

枚举

在Swift中,枚举是一种定义一组有限值集合的数据类型。枚举的每一个值都是一个符合特定类型的类型。枚举可以包含成员值和关联值。

示例:

```

enum Compass {

case north, south, east, west

}

var direction = Compass.north

direction = .east

enum Result {

case success(T), failure(Error)

}

var res = Result.success("Hello")

res = .failure(NSError(domain: "Error", code: 100, userInfo: nil))

```

可选类型

在Swift中,可选类型用于表示一个值可能存在,也可能不存在的情况。可选类型的声明需要在类型后加一个问号“?”。

示例:

```

var optionalValue: String? = nil

optionalValue = "Hello, Swift"

if let value = optionalValue {

print(value)

}

```

Swift常用方法

字符串方法:

- hasPrefix(_ prefix: String):判断字符串是否以指定的前缀开头;

- hasSuffix(_ suffix: String):判断字符串是否以指定的后缀结尾;

- lowercased():将字符串转换为小写;

- uppercased():将字符串转换为大写;

- count:获取字符串的长度。

示例:

```

let str = "Hello, Swift!"

print(str.hasPrefix("Hello")) // true

print(str.hasSuffix("t!")) // true

print(str.lowercased()) // hello, swift!

print(str.uppercased()) // HELLO, SWIFT!

print(str.count) // 13

```

数组方法:

- append(_ newElement: Element):在数组末尾添加一个元素;

- insert(_ newElement: Element, at i: Int):在数组的指定位置插入一个元素;

- remove(at index: Int):删除数组中的指定元素;

- reverse():将数组中的元素顺序倒序。

示例:

```

var arr = ["apple", "banana", "pear"]

arr.append("orange")

arr.insert("watermelon", at: 0)

arr.remove(at: 2)

arr.reverse()

print(arr) // ["orange", "banana", "watermelon", "apple"]

```

字典方法:

- updateValue(_ value: Value, forKey key: Key):更新字典中指定键的值;

- removeValue(forKey key: Key):删除字典中的指定键值对。

示例:

```

var dict = ["name": "Tom", "age": 18]

dict.updateValue(19, forKey: "age")

dict.removeValue(forKey: "name")

print(dict) // ["age": 19]

```

可选类型方法:

- optionalValue != nil:判断可选类型值是否存在;

- optionalValue ?? defaultValue:如果可选类型值不存在,则使用默认值;

- optionalValue!:强制解包可选类型值,如果值不存在则会引发运行时错误。

示例:

```

var optionalValue: String? = nil

print(optionalValue != nil) // false

var value = optionalValue ?? "default value"

print(value) // "default value"

optionalValue = "Hello, Swift"

print(optionalValue!) // "Hello, Swift"

```

Swift实例

1、计算BMI指数

计算BMI指数需要读入一个人的身高和体重,计算公式为:BMI = 体重(kg) / 身高(m)²。然后判断BMI指数是否正常范围,正常范围为18.5 ~ 24。

```

func calculateBMI(weight: Double, height: Double) -> String {

let bmi = weight / pow(height / 100, 2)

if bmi < 18.5 {

return "偏瘦"

} else if bmi < 24 {

return "正常"

} else {

return "偏胖"

}

}

print(calculateBMI(weight: 60, height: 170)) // 输出 "正常"

```

2、查找字符串中的数字

给定一个字符串,找到其中的所有数字并返回它们的和。

```

func findDigitsSum(from str: String) -> Int {

var sum = 0

for char in str {

if let digit = Int(String(char)) {

sum += digit

}

}

return sum

}

print(findDigitsSum(from: "Hello123")) // 输出 "6"

```

3、冒泡排序

冒泡排序是一种简单的排序算法,它重复遍历要排序的元素,每次比较相邻的两个元素,如果它们的顺序错误,则交换它们的位置,直到序列有序为止。

```

func bubbleSort(_ arr: inout [Int]) {

let n = arr.count

for i in 0.. for j in 0..<(n - i - 1) {

if arr[j] > arr[j + 1] {

let tmp = arr[j]

arr[j] = arr[j + 1]

arr[j + 1] = tmp

}

}

}

}

var arr = [3, 1, 5, 4, 2]

bubbleSort(&arr)

print(arr) // 输出 "[1, 2, 3, 4, 5]"

```

4、查找数组中的重复元素

给定一个整数数组,找到其中的重复元素并返回它们的个数。

```

func findDuplicates(in arr: [Int]) -> Int {

var dict = [Int: Int]()

var count = 0

for num in arr {

if let val = dict[num] {

dict[num] = val + 1

count += 1

} else {

dict[num] = 1

}

}

return count

}

print(findDuplicates(in: [1, 2, 3, 4, 5, 5])) // 输出 "1"

```

5、加密和解密字符串

加密和解密字符串可以使用Caesar Cipher算法。加密过程是将字符串的每个字符向后移动一定的位数,解密过程是将字符串的每个字符向前移动同样的位数。

```

let shift = 3

func encrypt(_ str: String) -> String {

var result = ""

for char in str {

var ascii = char.asciiValue!

if char.isLetter {

ascii += UInt8(shift % 26)

if char.isLowercase {

if ascii > 122 {

ascii -= 26

}

} else {

if ascii > 90 {

ascii -= 26

}

}

result.append(Character(UnicodeScalar(ascii)))

} else {

result.append(char)

}

}

return result

}

func decrypt(_ str: String) -> String {

var result = ""

for char in str {

var ascii = char.asciiValue!

if char.isLetter {

ascii -= UInt8(shift % 26)

if char.isLowercase {

if ascii < 97 {

ascii += 26

}

} else {

if ascii < 65 {

ascii += 26

}

}

result.append(Character(UnicodeScalar(ascii)))

} else {

result.append(char)

}

}

return result

}

let text = "Hello, Swift!"

let cipher = encrypt(text)

let plain = decrypt(cipher)

print(cipher) // 输出 "Khoor, Vlwix!"

print(plain) // 输出 "Hello, Swift!"

```

结论

本文详细讲解了Swift语言的基础知识、常用方法以及一些实例。Swift是一种易于学习和使用的编程语言,具有现代化的语法和特性,非常适合开发iOS、iPadOS、watchOS、tvOS等平台上的应用程序。学习Swift可以帮助开发者更高效地开发应用,并提高开发效率。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(76) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部