以 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,并在鸿蒙开发中找到乐趣!

相关推荐
普通人611 分钟前
CSS-box-sizing-使用指南
开发语言·前端·css·1024程序员节
风骏时光牛马16 分钟前
AI开源工具一站式尝鲜体验
前端
IT_陈寒24 分钟前
Python项目实战经验分享:为什么你的多进程日志会丢失?
前端·人工智能·后端
柳杉32 分钟前
让 AI 学会审美、建模和剪片:我收藏夹里的 14 个仓库
前端·ai编程·three.js
前端架构师-老李37 分钟前
HTML与CSS基础第七课—HTML 中的a标签(跳转链接)
前端·css·html
陈随易1 小时前
一个网吧网管,做了个网页,卖了 5000 万
前端·后端·程序员
jktantan9 小时前
Vue keep-alive 切标签后滚动位置回顶?因为 onDeactivated 里读到的 scrollTop 是 0
前端·javascript·vue.js
2601_9628857210 小时前
quotes 字段全解:涨跌幅、振幅、换手率的口径与单位
java·前端·spring
excel11 小时前
encodeURI 和 encodeURIComponent 有什么区别?
前端
前端精髓11 小时前
调用openrouter的免费API模型
java·前端·javascript