以 iOS 开发者的视角去看鸿蒙的struct

作为一名 iOS 开发者,我对 Swift 语言中的 struct 非常熟悉。它是我日常开发中用于定义轻量级数据结构的利器。最近,我开始接触华为的鸿蒙系统开发,尤其是 ArkTS 语言中的 struct。在这个过程中,我发现 ArkTS 的 struct 与 Swift 的 struct 有许多相似之处,但也存在一些独特的差异。今天,我将从 iOS 开发者的视角,带大家一起探索鸿蒙的 struct,并对比它与 Swift 的异同。


1. 什么是 struct?

在编程中,struct(结构体)是一种用于定义轻量级数据结构的方式。它通常用于封装一组相关的数据字段,适合存储简单的数据。无论是 Swift 还是 ArkTS,struct 都是一种值类型(value type),这意味着赋值时会复制整个结构,而不是传递引用。

Swift 中的 struct

在 Swift 中,struct 是一种通用的数据结构,可以用于定义任何类型的数据。例如:

swift 复制代码
struct Person {
    var name: String
    var age: Int
    var isStudent: Bool
}

let person = Person(name: "Alice", age: 25, isStudent: false)
print(person.name) // 输出: Alice

ArkTS 中的 struct

在鸿蒙的 ArkTS 中,struct 主要用于声明式 UI 开发。它通常与 UI 组件绑定,用于管理组件的状态和属性。例如:

typescript 复制代码
@Component
struct MyComponent {
    @State message: string = 'Hello World';
    build() {
        Text(this.message);
    }
}

2. ArkTS 的 struct 与 Swift 的 struct 的相同点

2.1 轻量级数据结构

无论是 ArkTS 还是 Swift,struct 都是一种轻量级的数据结构,适合存储简单的数据字段。它们都支持定义属性和方法,并且可以通过实例访问这些属性和方法。

2.2 值类型

两者都是值类型。这意味着赋值时会复制整个结构,而不是传递引用。例如:

  • Swift:

    swift 复制代码
    let p1 = Point(x: 10, y: 20)
    var p2 = p1
    p2.x = 30
    print(p1.x) // 输出: 10 (p1 的值未受影响)
  • ArkTS:

    typescript 复制代码
    let p1: Point = { x: 10, y: 20 };
    let p2: Point = p1;
    p2.x = 30;
    console.log(p1.x); // 输出: 10 (p1 的值未受影响)

2.3 不可继承

两者都不支持继承。struct 不能继承其他 struct 或 class,这确保了结构的简单性和高效性。


3. ArkTS 的 struct 与 Swift 的 struct 的不同点

3.1 语言定位

  • Swift 的 struct 是通用编程语言的一部分,适用于各种场景,包括数据结构、算法、UI 开发等。
  • ArkTS 的 struct 主要用于声明式 UI 开发,通常与 UI 组件绑定,用于管理组件的状态和属性。

3.2 与 UI 的绑定

  • ArkTS 的 struct 通常与 UI 组件紧密绑定,通过装饰器(如 @State、@Prop、@Link)管理组件的状态和属性变化。例如:

    typescript 复制代码
    @Component
    struct MyComponent {
        @State message: string = 'Hello World';
        build() {
            Text(this.message);
        }
    }
  • Swift 的 struct 不直接与 UI 绑定,UI 开发通常通过 SwiftUI 的 View 协议实现。例如:

    swift 复制代码
    struct ContentView: View {
        var body: some View {
            Text("Hello World")
        }
    }

3.3 序列化支持

  • ArkTS 的 struct 设计为可序列化,便于在应用程序的不同部分之间传递数据(如转换为 JSON 格式)。
  • Swift 的 struct 默认不支持序列化,需要手动实现 Codable 协议才能进行序列化和反序列化。

3.4 实例化方式

  • ArkTS 的 struct 实例化通常由 UI 框架自动管理,开发者不需要显式调用构造函数。

  • Swift 的 struct 需要显式实例化,例如:

    swift 复制代码
    let person = Person(name: "Alice", age: 25)

4. 从 iOS 开发者的角度看鸿蒙的 struct

作为一名 iOS 开发者,我最初接触 ArkTS 的 struct 时,觉得它非常类似于 Swift 的 struct。然而,随着深入使用,我发现 ArkTS 的 struct 更专注于声明式 UI 开发,这与 Swift 的通用性有所不同。

4.1 声明式 UI 的开发模式

ArkTS 的 struct 与 UI 组件紧密绑定,通过装饰器管理状态和属性变化。这种声明式 UI 的开发模式让我想起了 SwiftUI,但 ArkTS 的设计更加专注于鸿蒙系统的 UI 开发需求。

4.2 状态管理

ArkTS 的 struct 通过装饰器(如 @State、@Prop、@Link)实现状态管理,这与 SwiftUI 的 @State 和 @Binding 非常相似。这种设计使得状态管理更加直观和高效。

4.3 学习曲线

对于熟悉 Swift 和 SwiftUI 的开发者来说,学习 ArkTS 的 struct 并不困难。两者的核心概念非常相似,只是 ArkTS 更专注于鸿蒙系统的开发需求。


5. 总结

特性 ArkTS 的 struct Swift 的 struct
语言定位 主要用于声明式 UI 开发 通用编程,适用于各种场景
与 UI 的绑定 紧密绑定,通过装饰器管理状态 不直接绑定,UI 开发通过 SwiftUI 实现
值类型 是 是
继承 不支持 不支持
序列化 设计为可序列化 需要手动实现 Codable 协议
实例化方式 由 UI 框架自动管理 需要显式实例化

6. 适用场景

  • ArkTS 的 struct:适合鸿蒙应用的 UI 开发,特别是需要声明式 UI 和状态管理的场景。
  • Swift 的 struct :适合通用编程,包括数据结构、算法、UI 开发(通过 SwiftUI)等多种场景。

通过对比 ArkTS 和 Swift 的 struct,我深刻体会到两者在设计理念和应用场景上的异同。作为一名 iOS 开发者,我对 ArkTS 的 struct 充满了兴趣,它为我打开了一扇通往鸿蒙系统开发的大门。希望这篇文章能帮助更多开发者理解 ArkTS 的 struct,并在鸿蒙开发中找到乐趣!

相关推荐
Setsuna_F_Seiei7 小时前
前端转型 Agent 开发 06 之 Agent Memory 记忆系统(让 Agent 更智能,更懂你)
前端·agent·ai编程
zhangzeyuaaa8 小时前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
默_笙8 小时前
🌊 向量库和 ES 都查不出"关系",我只好给奶茶建了一张人脉网
前端·javascript
优选资讯9 小时前
标签打印软件怎么对接 Excel 数据
前端·excel
一个风轻云淡10 小时前
GCC 和 GDB命令简单解读
java·linux·前端
u01110267510 小时前
图片处理接口如何统一错误信息 前端提示与后端错误码设计
前端·状态模式
福兮说11 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
libokaifa11 小时前
把语音模型塞进手机:sherpa-onnx 在 Android 上的 ASR / TTS
前端
deli00711 小时前
DLA 枝晶生长实测:5000 个粒子集体停摆之后,分形维数收敛到 1.70
前端
IT_陈寒11 小时前
Redis卡顿的锅,这次真不是大key的错
前端·人工智能·后端