12.3 Swift:Apple生态的现代语言

Swift由Apple于2014年发布,替代Objective-C成为Apple平台(iOS、macOS、watchOS、tvOS)的主要开发语言。

swift
复制代码
// Swift代码示例

// 结构体和类
struct Point {
    var x: Double
    var y: Double
    
    func distance(to other: Point) -> Double {
        sqrt(pow(x - other.x, 2) + pow(y - other.y, 2))
    }
}

// 协议和扩展
protocol Shape {
    var area: Double { get }
}

struct Circle: Shape {
    let radius: Double
    var area: Double { .pi * radius * radius }
}

// 扩展:为现有类型添加方法
extension String {
    var isEmail: Bool {
        contains("@") && contains(".")
    }
}

// 可选类型和可选绑定
func greet(name: String?) -> String {
    guard let name = name, !name.isEmpty else {
        return "Hello, stranger!"
    }
    return "Hello, \(name)!"
}

// 闭包和高阶函数
let numbers = [1, 5, 10, 15, 20]
let evenSquares = numbers
    .filter { $0 % 2 == 0 }
    .map { $0 * $0 }

// 并发(Swift 5.5+)
func fetchData() async throws -> String {
    try await Task.sleep(nanoseconds: 1_000_000_000)
    return "Data"
}

// @MainActor确保UI更新在主线程
@MainActor
class ViewModel: ObservableObject {
    @Published var data: String = ""
    
    func load() async {
        do {
            data = try await fetchData()
        } catch {
            data = "Error: \(error)"
        }
    }
}

// Result类型处理错误
enum NetworkError: Error {
    case invalidURL
    case noData
}

func makeRequest(_ url: String) -> Result<String, NetworkError> {
    guard url.hasPrefix("https://") else {
        return .failure(.invalidURL)
    }
    return .success("Response from \(url)")
}

Swift的特点:

  • 类型安全:强类型系统
  • 可选类型:内置的null处理
  • 协议导向编程:强调协议(接口)而非继承
  • 值类型优先:结构体和枚举是值类型,默认拷贝
  • 内存安全:自动引用计数(ARC)管理内存
  • SwiftUI:声明式UI框架
  • 与Objective-C互操作:可以调用现有的Objective-C代码