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)  // 不需要解包,但危险

学习资源

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. 编写一个工具类,带有 mapfilterflatMap 扩展

第二阶段: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

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

相关推荐
for_ever_love__1 小时前
UI学习:无限轮播视图
学习·ui·ios·objective-c
MonkeyKing2 小时前
iOS Block 底层深度解析:结构、变量捕获、copy逻辑与循环引用本质
ios
MonkeyKing2 小时前
iOS ARC 本质:__strong / __weak / __unsafe_unretained / __autoreleasing 深度解析
ios
humors2213 小时前
全平台日常使用的国外应用
android·ios·app·安卓·应用·国外
pop_xiaoli4 小时前
【iOS】锁的原理
ios·objective-c·cocoa
秋雨梧桐叶落莳4 小时前
iOS——MVC架构学习
学习·ui·ios·架构·mvc·objective-c
代码的小搬运工20 小时前
UITableView
开发语言·ui·ios·objective-c
互联网行业信息差1 天前
iOS开发常见问题与最新工具使用心得
macos·ios·cocoa
MonkeyKing1 天前
iOS Tagged Pointer 原理、判断方式、适用场景与避坑指南
ios