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

相关推荐
Swing_wingS几秒前
SpringMvc解决跨域问题的源码汇总。
前端
乌龟的黑头-阿尔及利亚2 分钟前
使用 Vite 创建 Vue 3 项目:从零开始的详细指南
前端·javascript·vue.js
三天不学习15 分钟前
what?ngify 比 axios 更好用,更强大?
前端·axios·请求响应·ngify
2403_8751809528 分钟前
一键掌握多平台短视频矩阵营销/源码部署
java·前端·数据结构·线性代数·矩阵·php
Best_卡卡43 分钟前
前端性能-HTTP缓存
前端·http·缓存
GIS好难学2 小时前
《Openlayers零基础教程》第六课:地图控件
前端·javascript·零基础·openlayers
桃园码工3 小时前
3_CSS3 渐变 --[CSS3 进阶之路]
前端·css·css3·css3 渐变
成长中的向日葵3 小时前
element-ui dialog弹窗 设置点击空白处不关闭
前端·vue.js
ihengshuai4 小时前
Gitlab流水线配置
前端·docker·gitlab·devops
alphaTabc4 小时前
从0到1实现一个插件系统
前端·javascript