IOS学习路线计划

iOS 开发学习路线计划

适用对象:Android 开发工程师,已具备面向对象编程基础

学习路线总览

复制代码
第一阶段:Swift 语法基础          (预计 1-2 周)
    │
    ├─ 1.1 Swift vs Kotlin 对比学习
    ├─ 1.2 类型系统与 Optional
    ├─ 1.3 协议与扩展
    ├─ 1.4 泛型编程
    └─ 1.5 Swift 高级特性

第二阶段:UI 框架入门              (预计 1-2 周)
    │
    ├─ 2.1 SwiftUI 基础
    ├─ 2.2 UIKit 基础
    ├─ 2.3 SwiftUI vs UIKit 选择
    └─ 2.4 常用 UI 组件

第三阶段:核心功能开发              (预计 2-3 周)
    │
    ├─ 3.1 数据存储 (UserDefaults/CoreData/SQLite)
    ├─ 3.2 网络请求 (URLSession/Alamofire)
    ├─ 3.3 JSON 解析
    └─ 3.4 线程与异步 (GCD/async-await)

第四阶段:系统框架                 (预计 1-2 周)
    │
    ├─ 4.1 蓝牙开发 (CoreBluetooth)
    ├─ 4.2 相机与相册 (AVFoundation/Photos)
    ├─ 4.3 传感器 (CoreMotion/CoreLocation)
    └─ 4.4 通知与权限

第五阶段:架构与工程化              (预计 1-2 周)
    │
    ├─ 5.1 MVVM 架构
    ├─ 5.2 依赖管理 (CocoaPods/SPM)
    ├─ 5.3 常用第三方库
    └─ 5.4 项目结构组织

第六阶段:打包与分发               (预计 1 周)
    │
    ├─ 6.1 Xcode 与签名
    ├─ 6.2 App Store 上架
    ├─ 6.3 打包与分发 (xcarchive/xcframework)
    └─ 6.4 TestFlight 内测

第一阶段:Swift 语法基础

阶段目标

掌握 Swift 语言核心语法,理解与 Kotlin 的差异,能够阅读和编写 Swift 代码。

学习内容

1.1 Swift vs Kotlin 对比学习
Kotlin Swift 说明
val / var let / var 常量/变量声明
data class struct 值类型数据类
object class + singleton 单例模式
companion object static 静态成员
sealed class enum (关联值) 密封类/枚举
?. / ?.let ? / guard let 空安全
when switch 模式匹配
by lazy lazy 延迟初始化
inline class @propertyWrapper 属性包装
1.2 类型系统与 Optional
swift 复制代码
// Optional 类型 - 类似 Kotlin 的可空类型
var name: String? = nil
var age: Int? = 10

// 解包方式 1: if-let (类似 ?.let)
if let unwrappedName = name {
    print(unwrappedName)
}

// 解包方式 2: guard-let (推荐,类似 Kotlin 的 let + Elvis)
func greet(_ name: String?) {
    guard let name = name else {
        print("无名字")
        return
    }
    print("Hello, \(name)")
}

// 解包方式 3: ?? 操作符 (Elvis 操作符)
let displayName = name ?? "Unknown"

// 解包方式 4: 隐式解包
var implicitName: String! = "Hello"
print(implicitName)  // 不需要解包,但危险

学习资源:

1.3 协议与扩展
swift 复制代码
// 协议 (类似 Kotlin 的接口,但更强大)
// 可以有默认实现、关联类型、协议组合

protocol Drawable {
    var color: String { get set }
    func draw()
}

// 协议扩展 (类似 Kotlin 的扩展函数)
extension Drawable {
    func drawWithDefault() {
        print("默认绘制")
    }
}

// 面向协议编程示例
struct Circle: Drawable {
    var color: String
    var radius: Double

    func draw() {
        print("画圆: \(color), 半径: \(radius)")
    }
}
1.4 泛型编程
swift 复制代码
// 泛型函数 (类似 Kotlin)
func swap<T>(_ a: inout T, _ b: inout T) {
    let temp = a
    a = b
    b = temp
}

// 泛型约束 (类似 Kotlin 的 where)
func findMax<T: Comparable>(in array: [T]) -> T? {
    return array.max()
}

// 泛型结构体
struct Stack<Element> {
    var items: [Element] = []

    mutating func push(_ item: Element) {
        items.append(item)
    }

    mutating func pop() -> Element? {
        return items.popLast()
    }
}
1.5 Swift 高级特性
swift 复制代码
// 高阶函数 (类似 Kotlin)
let numbers = [1, 2, 3, 4, 5]
let doubled = numbers.map { $0 * 2 }      // [2, 4, 6, 8, 10]
let evens = numbers.filter { $0 % 2 == 0 } // [2, 4]
let sum = numbers.reduce(0) { $0 + $1 }   // 15

// 闭包语法糖
let sorted = numbers.sorted { $0 > $1 }

// resultBuilder (用于声明式 UI)
@ViewBuilder
func makeView() -> some View {
    Text("Hello")
    Text("World")
}

// Property Wrapper
@propertyWrapper
struct UserDefault<T> {
    let key: String
    var wrappedValue: T?

    init(key: String) {
        self.key = key
        self.wrappedValue = UserDefaults.standard.object(forKey: key) as? T
    }
}

// 访问控制 (比 Kotlin 更细致)
open   // 公开,可被重写和访问 (类似 Java public)
public // 公开,不能被重写
internal // 内部,模块内可见 (默认)
fileprivate // 文件私有
private // 私有

阶段练习

  1. 实现一个 LinkedList<T> 泛型链表
  2. 用协议实现一个可排序的 Sortable 接口
  3. 编写一个工具类,带有 map、filter、flatMap 扩展

第二阶段:UI 框架入门

阶段目标

理解 SwiftUI 和 UIKit 的核心概念,掌握常用 UI 组件,能够构建简单的 iOS 界面。

学习内容

2.1 SwiftUI 基础
swift 复制代码
import SwiftUI

// 视图定义 (类似 Jetpack Compose)
struct ContentView: View {
    @State private var count = 0

    var body: some View {
        VStack(spacing: 20) {
            Text("计数: \(count)")
                .font(.largeTitle)

            HStack {
                Button("减少") {
                    count -= 1
                }
                Button("增加") {
                    count += 1
                }
            }
        }
        .padding()
    }
}

// 预览
#Preview {
    ContentView()
}
2.2 UIKit 基础
swift 复制代码
import UIKit

// UIKit 方式 (类似 Android View 系统)
class ViewController: UIViewController {

    private let label = UILabel()
    private let button = UIButton(type: .system)

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white

        // 添加 Label
        label.text = "Hello UIKit"
        label.textAlignment = .center
        label.frame = CGRect(x: 50, y: 100, width: 300, height: 50)
        view.addSubview(label)

        // 添加 Button
        button.setTitle("点击我", for: .normal)
        button.frame = CGRect(x: 100, y: 200, width: 200, height: 44)
        button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
        view.addSubview(button)
    }

    @objc func buttonTapped() {
        label.text = "按钮被点击!"
    }
}
2.3 SwiftUI vs UIKit 选择
场景 推荐 原因
新项目、快速开发 SwiftUI 声明式、代码量少
iOS 15+ App SwiftUI 现代化特性支持
需要精细控制 UIKit 更底层控制
复杂动画 UIKit Core Animation 更灵活
已有 UIKit 项目 混用 渐进式迁移
第三方 UI 库 看库 部分库只支持 UIKit

实际项目中常见做法:SwiftUI 作为主界面 + UIKit 处理特定场景

2.4 常用 UI 组件
SwiftUI 组件
组件 用途 Android 对应
Text 文本显示 TextView
Image 图片展示 ImageView
Button 按钮 Button
TextField / TextEditor 文本输入 EditText
List 列表 RecyclerView/ListView
LazyVStack / LazyHStack 高性能列表 RecyclerView
NavigationStack 导航 Fragment + NavController
TabView 底部标签页 BottomNavigationView
Sheet / FullScreenCover 弹窗 Dialog/BottomSheet
Alert 警告框 AlertDialog
Toggle 开关 Switch
Slider 滑块 SeekBar
ProgressView 进度条 ProgressBar
AsyncImage 异步图片加载 Coil/Glide
ScrollView 滚动视图 ScrollView
LazyVGrid / LazyHGrid 网格布局 GridLayout
VStack / HStack / ZStack 布局容器 LinearLayout/FrameLayout
Group 分组 ViewGroup
UIKit 组件
组件 用途 Android 对应
UILabel 文本显示 TextView
UIImageView 图片展示 ImageView
UIButton 按钮 Button
UITextField / UITextView 文本输入 EditText
UITableView 表格列表 ListView/RecyclerView
UICollectionView 网格列表 RecyclerView + GridLayoutManager
UINavigationController 导航控制器 Fragment + NavController
UITabBarController 底部标签 BottomNavigationView
UIScrollView 滚动视图 ScrollView
UICollectionView 自定义网格 RecyclerView
UIStackView 堆叠布局 LinearLayout
UITableViewCell 列表项 ViewHolder

第三阶段:核心功能开发

阶段目标

掌握 iOS 本地数据存储、网络请求、JSON 解析、异步编程等核心功能开发。

学习内容

3.1 数据存储
swift 复制代码
// 1. UserDefaults - 轻量级键值存储 (类似 SharedPreferences)
UserDefaults.standard.set("value", forKey: "key")
let value = UserDefaults.standard.string(forKey: "key")

// 2. FileManager - 文件存储 (类似 File API)
let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL = documentsPath.appendingPathComponent("data.txt")

// 3. SQLite - 关系型数据库 (类似 Room)
import SQLite

struct User: Codable {
    var id: Int?
    var name: String
    var email: String
}

// 4. CoreData - ORM 框架 (类似 Room,但更重量级)
// 适合复杂对象图和大型数据集

// 5. Keychain - 安全存储 (类似 EncryptedSharedPreferences)
import Security

对比 Android:

Android iOS 适用场景
SharedPreferences UserDefaults 简单配置
Room SQLite / CoreData 结构化数据
File API FileManager 文件读写
EncryptedSharedPreferences Keychain 敏感数据
3.2 网络请求
swift 复制代码
// 方式 1: URLSession (原生,类似 OkHttp)
func fetchData() async throws {
    let url = URL(string: "https://api.example.com/data")!
    let (data, response) = try await URLSession.shared.data(from: url)
    let decoded = try JSONDecoder().decode(Response.self, from: data)
}

// 方式 2: Alamofire (推荐,类似 Retrofit)
import Alamofire

AF.request("https://api.example.com/data")
    .validate()
    .responseDecodable(of: Response.self) { response in
        switch response.result {
        case .success(let value):
            print(value)
        case .failure(let error):
            print(error)
        }
    }
3.3 JSON 解析
swift 复制代码
// Codable (类似 Gson/Kotlinx Serialization)
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}

// 解析
let jsonData = Data()
let user = try JSONDecoder().decode(User.self, from: jsonData)

// 编码
let encoded = try JSONEncoder().encode(user)
3.4 线程与异步
swift 复制代码
// Swift 5.5+ async/await (类似 Kotlin Coroutines)
func fetchUser() async throws -> User {
    let url = URL(string: "https://api.example.com/user")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return try JSONDecoder().decode(User.self, from: data)
}

// 调用
Task {
    do {
        let user = try await fetchUser()
        print(user.name)
    } catch {
        print("Error: \(error)")
    }
}

// Grand Central Dispatch (类似 Handler/Executor)
DispatchQueue.global(qos: .background).async {
    // 后台执行
    DispatchQueue.main.async {
        // 回到主线程更新 UI
    }
}

第四阶段:系统框架

阶段目标

了解 iOS 常用系统框架的使用,包括蓝牙、相机、传感器、通知等。

学习内容

4.1 蓝牙开发 (CoreBluetooth)
swift 复制代码
// 你的 LdBpBle SDK 就是基于 CoreBluetooth
import CoreBluetooth

class BluetoothManager: NSObject {
    var centralManager: CBCentralManager!
    var discoveredPeripherals: [CBPeripheral] = []

    func startScanning() {
        centralManager = CBCentralManager(delegate: self, queue: nil)
    }
}

extension BluetoothManager: CBCentralManagerDelegate {
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        if central.state == .poweredOn {
            central.scanForPeripherals(withServices: nil, options: nil)
        }
    }

    func centralManager(_ central: CBCentralManager,
                        didDiscover peripheral: CBPeripheral,
                        advertisementData: [String: Any],
                        rssi RSSI: NSNumber) {
        discoveredPeripherals.append(peripheral)
    }
}
4.2 相机与相册
swift 复制代码
// 相机 (类似 CameraX)
import AVFoundation

// Photos 框架 (类似 Photo Library API)
import Photos

// 请求权限
PHPhotoLibrary.requestAuthorization(for: .readWrite) { status in
    if status == .authorized {
        // 访问相册
    }
}
4.3 传感器
swift 复制代码
// 位置 (类似 Google Play Services Location)
import CoreLocation

let locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()

// 运动 (类似 SensorManager)
import CoreMotion

let pedometer = CMPedometer()
pedometer.startUpdates(from: Date()) { data, error in
    if let steps = data?.numberOfSteps {
        print("步数: \(steps)")
    }
}
4.4 通知与权限
swift 复制代码
// 本地通知 (类似 NotificationCompat)
import UserNotifications

UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge]) { granted, error in
    if granted {
        let content = UNMutableNotificationContent()
        content.title = "标题"
        content.body = "内容"

        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
        let request = UNNotificationRequest(identifier: "id", content: content, trigger: trigger)

        UNUserNotificationCenter.current().add(request)
    }
}

第五阶段:架构与工程化

阶段目标

掌握 MVVM 架构模式,理解依赖管理,能够组织中大型项目结构。

学习内容

5.1 MVVM 架构
swift 复制代码
// Model - 数据模型 (类似 Android data class)
struct User: Codable, Identifiable {
    let id: Int
    let name: String
    let email: String
}

// ViewModel - 视图模型 (类似 Android ViewModel + LiveData)
import Combine

class UserViewModel: ObservableObject {
    @Published var users: [User] = []
    @Published var isLoading = false
    @Published var errorMessage: String?

    private var cancellables = Set<AnyCancellable>()

    func loadUsers() {
        isLoading = true
        // 模拟网络请求
        DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [weak self] in
            self?.users = [
                User(id: 1, name: "Alice", email: "alice@example.com"),
                User(id: 2, name: "Bob", email: "bob@example.com")
            ]
            self?.isLoading = false
        }
    }
}

// View - 视图 (SwiftUI)
struct UserListView: View {
    @StateObject private var viewModel = UserViewModel()

    var body: some View {
        Group {
            if viewModel.isLoading {
                ProgressView()
            } else {
                List(viewModel.users) { user in
                    VStack(alignment: .leading) {
                        Text(user.name).font(.headline)
                        Text(user.email).font(.subheadline).foregroundColor(.gray)
                    }
                }
            }
        }
        .onAppear {
            viewModel.loadUsers()
        }
    }
}
5.2 依赖管理
swift 复制代码
// 方式 1: Swift Package Manager (Xcode 内置)
    // File > Add Packages > 添加 Git 仓库

// 方式 2: CocoaPods (类似 Gradle)
    // Podfile 方式管理依赖
    platform :ios, '15.0'
    use_frameworks!

    target 'MyApp' do
      pod 'Alamofire', '~> 5.0'
      pod 'SnapKit', '~> 5.0'
    end
5.3 常用第三方库
库名 用途 Android 对应
Alamofire 网络请求 Retrofit + OkHttp
SnapKit Auto Layout 约束 ConstraintLayout
Kingfisher 图片加载缓存 Coil/Glide
SQLite.swift SQLite 封装 Room
SwiftyJSON JSON 解析 Gson/Kotlinx Serialization
KeychainAccess Keychain 封装 EncryptedSharedPreferences
Lottie 动画播放 Lottie
Charts 图表 MPAndroidChart
Reachability.swift 网络状态 Connectivity
5.4 项目结构组织
复制代码
MyApp/
├── App/
│   ├── MyAppApp.swift          # App 入口
│   └── AppDelegate.swift        # App 生命周期
├── Core/
│   ├── Network/                 # 网络层
│   │   ├── APIClient.swift
│   │   └── APIEndpoints.swift
│   ├── Storage/                 # 存储层
│   │   ├── UserDefaults+Extensions.swift
│   │   └── DatabaseManager.swift
│   └── Extensions/               # 扩展
│       ├── Color+Extensions.swift
│       └── View+Extensions.swift
├── Features/
│   ├── Home/                    # 首页功能模块
│   │   ├── Views/
│   │   │   └── HomeView.swift
│   │   ├── ViewModels/
│   │   │   └── HomeViewModel.swift
│   │   └── Models/
│   │       └── HomeItem.swift
│   └── Profile/                 # 个人中心模块
│       ├── Views/
│       ├── ViewModels/
│       └── Models/
├── Shared/
│   ├── Components/              # 共享组件
│   │   ├── LoadingView.swift
│   │   └── ErrorView.swift
│   └── Theme/                   # 主题
│       ├── Colors.swift
│       └── Typography.swift
└── Resources/
    ├── Assets.xcassets
    └── Info.plist

第六阶段:打包与分发

阶段目标

理解 Xcode 构建流程、证书签名、App Store 上架流程,能够独立打包发布应用。

学习内容

6.1 Xcode 与签名
复制代码
签名流程:
开发者账号 → 创建 App ID → 创建证书 → 创建描述文件 → Xcode 配置
概念 说明
App ID 应用唯一标识 (Bundle Identifier)
Certificate 证书,用于签名
Provisioning Profile 描述文件,包含证书和设备列表
Team ID 开发者团队 ID
6.2 App Store 上架
复制代码
上架流程:
代码开发 → Archive → 验证 → 上传 → App Store Connect 配置 → 审核 → 上架
6.3 打包与分发
bash 复制代码
# 命令行打包
xcodebuild archive \
    -workspace MyApp.xcworkspace \
    -scheme MyApp \
    -configuration Release \
    -archivePath ./build/MyApp.xcarchive

# 导出 IPA
xcodebuild -exportArchive \
    -archivePath ./build/MyApp.xcarchive \
    -exportOptionsPlist ExportOptions.plist \
    -exportPath ./build
6.4 xcframework 构建 (你已学的)
bash 复制代码
# 构建多架构 framework
xcodebuild build \
    -scheme MySDK \
    -destination 'generic/platform=iOS' \
    -configuration Release \
    BUILD_LIBRARY_FOR_DISTRIBUTION=YES

# 合并为 xcframework
xcodebuild -create-xcframework \
    -framework build/Release-iphoneos/MySDK.framework \
    -framework build/Release-iphonesimulator/MySDK.framework \
    -output MySDK.xcframework

学习资源推荐

官方文档

在线课程

书籍

  • 《Swift 编程权威指南》
  • 《iOS 编程实战》
  • 《Effective Swift》

工具


建议的学习顺序

  1. 第一周: 专注 Swift 语法,对比 Kotlin 学习
  2. 第二周: 搭建 Hello World,理解 View 概念
  3. 第三周: 学习 SwiftUI 基础组件
  4. 第四周: 实现一个 Todo App,串联所有知识
  5. 第五周: 学习网络请求和数据存储
  6. 第六周: 学习 MVVM 架构和依赖管理
  7. 第七周: 学习系统框架(蓝牙、相机等)
  8. 第八周: 完整开发一个 App 并上架

快速参考卡片

Android → iOS 概念对照

Android iOS
Activity UIViewController
Fragment UIViewController (或 SwiftUI View)
View SwiftUI View / UIView
ViewModel ObservableObject
LiveData @Published
DataBinding @State / @Binding
RecyclerView List / LazyVStack / UITableView
ConstraintLayout SwiftUI Stack / UIStackView / SnapKit
SharedPreferences UserDefaults
Room SQLite.swift / CoreData
Retrofit Alamofire / URLSession
OkHttp URLSession
Glide Kingfisher / AsyncImage
Coroutines async/await
Handler DispatchQueue
ViewPager2 TabView / UIPageViewController
BottomNavigationView TabView
Navigation Component NavigationStack
Intent 页面跳转 (NavigationLink / push)
Gradle CocoaPods / SPM
AndroidManifest Info.plist
ProGuard 代码混淆 (可选)
APK IPA
AAB App Store Upload

祝学习顺利!如有具体问题,欢迎随时提问。

相关推荐
传奇开心果编程5 小时前
【Compose Multiplatform 跨端开发学与练】第3课 布局与组件
android·windows·学习·ui·ios·kotlin·composer
tink7 小时前
告别 Xcode IDE:用 VS Code + SweetPad + XcodeGen 开发 iOS 应用的完整指南
ios·swiftui·xcode
传奇开心果编程8 小时前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
传奇开心果编程9 小时前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
传奇开心果编程9 小时前
【Compose Multiplatform 跨端开发学与练】第4课 导航与路由
android·windows·学习·ui·ios·kotlin·composer
黑科技iOS上架9 小时前
iOS隐私合规扫描工具
ios·审核
传奇开心果编程10 小时前
【Compose Multiplatform 跨端开发学与练】第6课 状态管理与架构
android·学习·ui·ios·架构·kotlin·composer
传奇开心果编程10 小时前
【Compose Multiplatform 跨端开发学与练】第2课 Compose 基础语法
android·windows·学习·ui·ios·kotlin·composer
可乐鸡翅yeah_10 小时前
hls.js 缓冲区参数 maxBufferLength、maxBufferSize 通俗讲解与业务调参
开发语言·javascript·ios·音视频·safari·m3u8
茶底世界之下1 天前
Metal 冷启动并发下,Pipeline Cache 为什么必须合并在途编译
ios·swift