详解Swift 结构体

 更新时间:2020年09月04日 11:53:43   作者:菜鸟教程  
这篇文章主要介绍了Swift 结构体的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

Swift 结构体是构建代码所用的一种通用且灵活的构造体。

我们可以为结构体定义属性(常量、变量)和添加方法,从而扩展结构体的功能。

与 C 和 Objective C 不同的是:

  • 结构体不需要包含实现文件和接口。
  • 结构体允许我们创建一个单一文件,且系统会自动生成面向其它代码的外部接口。

结构体总是通过被复制的方式在代码中传递,因此它的值是不可修改的。

语法

我们通过关键字 struct 来定义结构体:

struct nameStruct { 
  Definition 1
  Definition 2
  ……
  Definition N
}

实例

我们定义一个名为 MarkStruct 的结构体 ,结构体的属性为学生三个科目的分数,数据类型为 Int:

struct MarkStruct{
  var mark1: Int
  var mark2: Int
  var mark3: Int
}

我们可以通过结构体名来访问结构体成员。

结构体实例化使用 let 关键字:

import Cocoa

struct studentMarks {
  var mark1 = 100
  var mark2 = 78
  var mark3 = 98
}
let marks = studentMarks()
print("Mark1 是 \(marks.mark1)")
print("Mark2 是 \(marks.mark2)")
print("Mark3 是 \(marks.mark3)")

以上程序执行输出结果为:

Mark1 是 100
Mark2 是 78
Mark3 是 98

实例中,我们通过结构体名 'studentMarks' 访问学生的成绩。结构体成员初始化为mark1, mark2, mark3,数据类型为整型。

然后我们通过使用 let 关键字将结构体 studentMarks() 实例化并传递给 marks。

最后我们就通过 . 号来访问结构体成员的值。

以下实例化通过结构体实例化时传值并克隆一个结构体:

import Cocoa

struct MarksStruct {
  var mark: Int

  init(mark: Int) {
   self.mark = mark
  }
}
var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct // aStruct 和 bStruct 是使用相同值的结构体!
bStruct.mark = 97
print(aStruct.mark) // 98
print(bStruct.mark) // 97

以上程序执行输出结果为:

98
97

结构体应用

在你的代码中,你可以使用结构体来定义你的自定义数据类型。

结构体实例总是通过值传递来定义你的自定义数据类型。

按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:

  • 结构体的主要目的是用来封装少量相关简单数据值。
  • 有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
  • 任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
  • 结构体不需要去继承另一个已存在类型的属性或者行为。

举例来说,以下情境中适合使用结构体:

  • 几何形状的大小,封装一个width属性和height属性,两者均为Double类型。
  • 一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。
  • 三维坐标系内一点,封装x,y和z属性,三者均为Double类型。

结构体实例是通过值传递而不是通过引用传递。

import Cocoa

struct markStruct{
  var mark1: Int
  var mark2: Int
  var mark3: Int
  
  init(mark1: Int, mark2: Int, mark3: Int){
    self.mark1 = mark1
    self.mark2 = mark2
    self.mark3 = mark3
  }
}

print("优异成绩:")
var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
print(marks.mark1)
print(marks.mark2)
print(marks.mark3)

print("糟糕成绩:")
var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)
print(fail.mark1)
print(fail.mark2)
print(fail.mark3)

以上程序执行输出结果为:

优异成绩:
98
96
100
糟糕成绩:
34
42
13

以上实例中我们定义了结构体 markStruct,三个成员属性:mark1, mark2 和 mark3。结构体内使用成员属性使用 self 关键字。

从实例中我们可以很好的理解到结构体实例是通过值传递的。

以上就是详解Swift 结构体的详细内容,更多关于Swift 结构体的资料请关注脚本之家其它相关文章!

相关文章

  • Swift版使用ThPullRefresh实现下拉上拉刷新数据

    Swift版使用ThPullRefresh实现下拉上拉刷新数据

    这篇文章主要介绍了Swift版使用ThPullRefresh实现下拉上拉刷新数据,需要的朋友可以参考下
    2016-01-01
  • Swift心得笔记之控制流

    Swift心得笔记之控制流

    控制流(Control Flow)我不想这么译的。。。我更想叫控制语句,但是想想,这么叫也没错,意指流程控制。大部分用法跟C类似。
    2015-04-04
  • Swift仿选择电影票的效果并实现无限/自动轮播的方法

    Swift仿选择电影票的效果并实现无限/自动轮播的方法

    这篇文章主要给大家介绍了关于Swift仿选择电影票的效果并实现无限/自动轮播的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • Swift简单快速的动态更换app图标AppIcon方法示例

    Swift简单快速的动态更换app图标AppIcon方法示例

    这篇文章主要为大家介绍了Swift动态更换app图标AppIcon的简单快速方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 如何利用SwiftUI实现可缩放的图片预览器

    如何利用SwiftUI实现可缩放的图片预览器

    这篇文章主要给大家介绍了关于如何利用SwiftUI实现可缩放图片预览器的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用SwiftUI具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • Swift Error的处理方法说明

    Swift Error的处理方法说明

    wift 是一个类型严格的语言,在很多情况下各种不匹配或者强制解包出错都会导致系统崩溃。所以我们需要进行异常处理,在swift中也叫错误处理Error
    2022-08-08
  • Swift编程中的switch...case语句实例解析

    Swift编程中的switch...case语句实例解析

    这篇文章主要介绍了Swift编程中的switch...case语句实例解析,其中重点还是对于fallthrough关键字用法的讲解,需要的朋友可以参考下
    2016-04-04
  • Swift Error重构优化详解

    Swift Error重构优化详解

    这篇文章主要为大家介绍了Swift Error的问题解决及重构优化方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 浅谈在Swift中关于函数指针的实现

    浅谈在Swift中关于函数指针的实现

    这篇文章主要介绍了浅谈在Swift中关于函数指针的实现,是作者根据C语言的指针特性在Swifft中做出的一个实验,需要的朋友可以参考下
    2015-07-07
  • Swift泛型Generics浅析讲解

    Swift泛型Generics浅析讲解

    泛型代码让你能根据你所定义的要求,写出可以用于任何类型的灵活的、可复用的函数。泛型是 Swift 最强大的特性之一,很多 Swift 标准库是基于泛型代码构建的
    2022-08-08

最新评论