专栏首页编程语言swift 中类(class)和结构体(struct)区别

swift 中类(class)和结构体(struct)区别

类(class)

引用类型:将一个对象赋值给另一个对象时,系统不会对此对象进行拷贝,而会将指向这个对象的指针赋值给另一个对象,当修改其中一个对象的值时,另一个对象的值会随之改变。

结构体(struct)

值类型:将一个对象赋值给另一个对象时,会对此对象进行拷贝,复制出一份副本给另一个对象,在修改其中一个对象的值时,不影响另外一个对象。

不同点:1.类属于引用类型,结构体属于值类型

2.类允许被继承,结构体不允许被继承

3.类中的每一个成员变量都必须被初始化,否则编译器会报错,而结构体不需要,编译器会自动帮我们生成init函数,给变量赋一个默认值

举个例子:

import UIKit

struct StructName {
    var name:String?
    
}
class ClassName {
    var name:String?
    
}
let stru:StructName = StructName()

var structArr:[StructName] = [stru]
for var temStruct in structArr {
    temStruct.name = "name"
}
for temStruct in structArr {
   print(temStruct.name) // 打印:nil
}


let clase:ClassName = ClassName()
var claseArr:[ClassName] = [clase]
for temClase in claseArr {
    temClase.name = "name"
}
for temClase in claseArr {
    print(temClase.name ) //打印: Optional("name")
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Swift:瀑布流 网络加载图片 Swift5

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    菜菜不吃蔡
  • MAC:Xcode loading 未响应

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    菜菜不吃蔡
  • Mac:github 下载慢的问题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    菜菜不吃蔡
  • 《你不知道的JavaScript》:js面向委托设计

    回顾下js原型继承,js版的继承与传统面向对象的继承的区别主要是不复制对象,而是通过对象的内置属性[[Propertype]]来关联需要“继承”的对象,这样当引...

    前端_AWhile
  • Web前端学习 第3章 JavaScript基础教程19 原始类型

    原始类型赋值给变量,遍历存储的是这个值本身,而你用类型赋值给变量,变量存储的是一个引用,这个引用会指向内存中的这个对象。

    学习猿地
  • 《Python入门09》揭秘python面向对象的编程~

    Python和C++、Java是一样的,它是一种面向对象的计算机语言。在前几章,主要介绍了Python内置的主要对象类型(数、字符串、列表、元组和字典),大致...

    ShuYini
  • 带你玩转ECMAScript 6,助力你写出高效漂亮的代码

    ES6 提供的许多新特性。用这些新特性,我们能在不降低代码可读性与维护性的基础上畅快地写 JavaScript~

    前端老鸟
  • 用es6快乐的写js代码

    ES6 提供的许多新特性。用这些新特性,我们能在不降低代码可读性与维护性的基础上畅快地写 JavaScript~

    前端老鸟
  • vue路由跳转传参数

    1. router-link <router-link :to="{ path: 'yourPath', param...

    庞小明
  • MacOS平台下@rpath在动态链接库中的应用

    一、背景介绍       公司开发的一个底层库被用在了Mac平台的多个产品中。在开发这个底层库的初期,对于Mac OSX下的Install name 并没有过多...

    24K纯开源

扫码关注云+社区

领取腾讯云代金券