以 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 不能继承其他 structclass,这确保了结构的简单性和高效性。


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

3.1 语言定位

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

3.2 与 UI 的绑定

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

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

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

3.3 序列化支持

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

3.4 实例化方式

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

  • Swiftstruct 需要显式实例化,例如:

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

相关推荐
朕的剑还未配妥4 分钟前
vue2项目中使用markdown-it插件教程,同时解决代码块和较长单词不换行问题
前端
清羽_ls15 分钟前
前端代码CR小知识点汇总
前端·cr
WestWong17 分钟前
基于 Web 技术栈的跨端开发模版
前端
饮水机战神18 分钟前
小程序被下架后,我连夜加了个 "安全接口"
前端·javascript
小old弟19 分钟前
小程序开发:原生 vs 跨平台框架全解析
前端
閞杺哋笨小孩24 分钟前
Vue3 点击指令(防抖 / 节流)
前端·vue.js
加油吧zkf26 分钟前
Python入门:从零开始的完整学习指南
开发语言·前端·python
柯南二号32 分钟前
【大前端】 TypeScript vs JavaScript:全面对比与实践指南
前端·javascript·typescript
岁月宁静32 分钟前
AI 语音合成技术实践:实现文本转语音实时流式播放
前端·vue.js·node.js
用户19087228247835 分钟前
多段进度条解决方案
前端