全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Swift 3.0基础学习之类与结构体

前言

和其他语言不同的是,Swift不需要为自定义的类和结构体创建接口和实现文件。只需要创建单一文件用来创建类和结构体,其他的外部接口的代码系统会自动生成。下面这篇文章主要介绍了关于Swift 3.0类与结构体的内容,感兴趣的朋友一起来看看吧。

类和结构体区别

Swift的类和结构体具有以下相同的特点:

  • 可以定义属性来保存值
  • 可以定义方法来提供功能
  • 可以定义下标来使用他们的值
  • 可以定义初始化器来配置他们的初始化状态
  • 可以在默认的实现上扩展他们的功能
  • 遵从协议来提供标准的功能

类具有结构体没有的额外的功能:

  • 继承允许某一个类继承另外一个类的特性
  • 类型转换允许你检查并在运行时解释一个类实例的类型
  • 析构器允许释放所有该类已经赋值的实例资源
  • 引用计数允许多个引用一个类的实例

结构体一般来说赋值的时候是直接拷贝的,没有使用引用计数的机制。

符号定义

下面是一个定义结构体和类的例子:

struct Resolution {
 var width = 0
 var height = 0
}
class VideoMode {
 var resolution = Resolution()
 var interlaced = false
 var frameRate = 0.0
 var name: String?
}

结构体初始化的时候可以直接

let vga = Resolution(width: 640, height: 480)

这点和类不一样,类没有默认的逐个成员的初始化器。

结构体和枚举是值类型

let hd = Resolution(width: 1920, height: 1080)
var cinema = hd

再赋值

cinema.width = 2048

结果

print("cinema is now \(cinema.width) pixels wide")
// Prints "cinema is now 2048 pixels wide"

然而hd.width还是1920

print("hd is still \(hd.width) pixels wide")
// Prints "hd is still 1920 pixels wide"

可见赋值过程是做了一次深度拷贝。

枚举也是具有同样的行为, 如以下例子,rememberedDirection的值并没有改变:

enum CompassPoint {
 case north, south, east, west
}
var currentDirection = CompassPoint.west
let rememberedDirection = currentDirection
currentDirection = .east
if rememberedDirection == .west {
 print("The remembered direction is still .west")
}
// Prints "The remembered direction is still .west"

类是引用类型

例如:

let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0

进行赋值引用

let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0

结果

print("The frameRate property of tenEighty is now \(tenEighty.frameRate)")
// Prints "The frameRate property of tenEighty is now 30.0"

标识符

  • 完全相同(===)
  • 不完全相同(!===)
if tenEighty === alsoTenEighty {
 print("tenEighty and alsoTenEighty refer to the same VideoMode instance.")
}
// Prints "tenEighty and alsoTenEighty refer to the same VideoMode instance."

完全相同(===)和等于(==)是不一样的:

  • 完全相同意思是两个类类型的常量或者变量指向完全相同的类实例
  • 等于意思是两个实例被认为值相同或者相等, 可以自行定义==操作符来进行判断两个实例在某种意义上是相等的

选择使用类和结构体

由于结构体的实例一般是值传递,而类实例一般是引用传递,因此你需要根据实际情况来考虑应该定义一个类还是结构体.

如有以下一种或多仲情况使用结构体:

  • 结构体主要的目的是封装少量的相关性简单数据值
  • 在结构体的实例赋值或者传递的时候,需要考虑到封装好的值会被拷贝而不是引用是否是合理的
  • 任何保存于结构体的属性都是值类型的,他们也是期望被赋值或者传递时是拷贝而不是引用
  • 结构体不需要从其他存在的类型继承属性或者行为

看看几个使用结构体恰当的例子:

  • 几何图形的大小,可以封装width和height属性,都是Double类型
  • 指向连续序列范围的方法,可以封装start和length属性,都是Int类型
  • 一个在3D坐标系统的点, 可以封装x, y和z属性,都是Double类型

其他的情况请定义类并创建类实例,管理和传递都使用引用。

在实践中,大部分的自定义数据结构都是使用类居多,很少使用结构体。

String、Array和Dictionary的赋值和拷贝行为

String, Array和 Dictionary都是结构体,因此赋值直接是拷贝,而NSString, NSArray 和NSDictionary则是类,所以是使用引用的方式。

参考英语原文:
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-ID82

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# swift3.0  # 结构体  # swift  # 类和结构体  # 类方法  # Swift中初始化init的方法小结  # Swift编程中的初始化与反初始化完全讲解  # Swift中初始化方法的顺序介绍  # Swift 3.0在集合类数据结构上的一些新变化总结  # Swift中的类class与结构体struct体学习笔记  # 详解Swift语言中的类与结构体  # Swift教程之类与结构详解  # Swift中类与结构的初始化示例解析  # 都是  # 他们的  # 完全相同  # 其他的  # 自定义  # 这篇文章  # 的是  # 而不是  # 是一个  # 几个  # 多个  # 不需要  # 如有  # 则是  # 并在  # 感兴趣  # 数据结构  # 考虑到  # 可以直接  # 只需要 


相关文章: 视频网站app制作软件,有什么好的视频聊天网站或者软件?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  TestNG的testng.xml配置文件怎么写  如何选择香港主机高效搭建外贸独立站?  建站主机与虚拟主机有何区别?如何选择最优方案?  建站主机选购指南:核心配置与性价比推荐解析  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  制作网站的模板软件,网站怎么建设?  建站之星×万网:智能建站系统+自助建站平台一键生成  如何在云主机上快速搭建多站点网站?  建站之星客服服务时间及联系方式如何?  建站之星伪静态规则如何设置?  用v-html解决Vue.js渲染中html标签不被解析的问题  Android自定义listview布局实现上拉加载下拉刷新功能  建站之星安装后如何配置SEO及设计样式?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  css网站制作参考文献有哪些,易聊怎么注册?  如何用wdcp快速搭建高效网站?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  如何选择美橙互联多站合一建站方案?  建站10G流量真的够用吗?如何应对访问高峰?  广平建站公司哪家专业可靠?如何选择?  设计网站制作公司有哪些,制作网页教程?  建站之星安装提示数据库无法连接如何解决?  制作电商网页,电商供应链怎么做?  建站之家VIP精选网站模板与SEO优化教程整合指南  威客平台建站流程解析:高效搭建教程与设计优化方案  大连网站制作公司哪家好一点,大连买房网站哪个好?  ,购物网站怎么盈利呢?  如何通过IIS搭建网站并配置访问权限?  网站企业制作流程,用什么语言做企业网站比较好?  建站之星会员如何解锁更多建站功能?  MySQL查询结果复制到新表的方法(更新、插入)  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  如何通过智能用户系统一键生成高效建站方案?  网站图片在线制作软件,怎么在图片上做链接?  建站之星Pro快速搭建教程:模板选择与功能配置指南  广州商城建站系统开发成本与周期如何控制?  建站主机SSH密钥生成步骤及常见问题解答?  如何自定义建站之星模板颜色并下载新样式?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  建站之星IIS配置教程:代码生成技巧与站点搭建指南  Python多线程使用规范_线程安全解析【教程】  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  如何通过VPS建站无需域名直接访问?  南京网站制作费用,南京远驱官方网站?  怀化网站制作公司,怀化新生儿上户网上办理流程?  网站设计制作企业有哪些,抖音官网主页怎么设置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。