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

相关推荐
小满zs21 小时前
Next.js第二章(项目搭建)
前端
前端小张同学21 小时前
基础需求就用AI写代码,你会焦虑吗?
java·前端·后端
小满zs21 小时前
Next.js第一章(入门)
前端
摇滚侠21 小时前
CSS(层叠样式表)和SCSS(Sassy CSS)的核心区别
前端·css·scss
不爱吃糖的程序媛21 小时前
Electron 桌面应用开发入门指南:从零开始打造 Hello World
前端·javascript·electron
Dontla21 小时前
前端状态管理,为什么要状态管理?(React状态管理、zustand)
前端·react.js·前端框架
编程猪猪侠21 小时前
前端根据文件后缀名智能识别文件类型的实用函数
前端
yinuo21 小时前
基于 Git Submodule 的代码同步融合方案
前端
伶俜monster1 天前
大模型 “万能接口” MCP 横空出世!打破数据孤岛,重塑 AI 交互新规则
前端·mcp
你听得到111 天前
肝了半个月,我用 Flutter 写了个功能强大的图片编辑器,告别image_cropper
android·前端·flutter