前言

和其他语言不同的是,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."
完全相同(===)和等于(==)是不一样的:
选择使用类和结构体
由于结构体的实例一般是值传递,而类实例一般是引用传递,因此你需要根据实际情况来考虑应该定义一个类还是结构体.
如有以下一种或多仲情况使用结构体:
看看几个使用结构体恰当的例子:
其他的情况请定义类并创建类实例,管理和传递都使用引用。
在实践中,大部分的自定义数据结构都是使用类居多,很少使用结构体。
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小时内与您取得联系。