Use struct to create a structure. Structures support many of the same behaviors as classes,including methods and initializers. One of the most important differences between structures and classes is that structures are always copied when they are passed around in your code,but classes are passed by reference.

上面这句话是官方文档的

我们可以看到结构的一些形式和类是基本相似的

但是他们有一个很大的区别就是,结构体是值引用,类的是址引用,可能这么说不太直观

我写了个例子,我们可以看一下

struct Hello {
    var firstName:String
    var secondName:String
    func sayHello() -> Void {
        print("Hello \(firstName) \(secondName)")
    }
}

var hello = Hello(firstName: "Liu",secondName: "Mingchuan")
var hello_1 = hello

hello.sayHello()
hello.secondName = "Ryoma"
hello.sayHello()

hello_1.sayHello()

class Hello2 {
    var firstName:String = ""
    var secondName:String = ""
    
    func sayHello() -> Void {
        print("Hello \(firstName) \(secondName)")
    }
}
var hello2 = Hello2()
var hello2_1=hello2

hello2.firstName = "Liu"
hello2.secondName = "Mingchuan"
hello2.sayHello()
hello2.secondName = "Ryoma"
hello2.sayHello()
输出

Hello Liu Mingchuan

Hello Liu Ryoma

Hello Liu Mingchuan


Hello Liu Mingchuan

Hello Liu Ryoma

Hello Liu Ryoma


我们就可以看到结构体的hello改变属性之后,hello_1的属性并没有改变

而类的就不同了,当hello2的属性变调之后,hello2_1的属性也变了

swift3新路程9结构体和类的更多相关文章

  1. Swift 2.x Plus -- Guard

    如果要判断的条件很多,那么在使用if-let这个模式的时候就会遇到一个很麻烦的问题,那就是很深的嵌套,比如这样:在很久以前是这样的,但是如果再用这个例子来说明if-let总是嵌套很多就不合适了。因为现在你可以这样:if-let只是要表达:符合条件的都进来开始下一步的操作。另外需要提到的是在流程控制语句中的do-while现在变成了repeat-while。

  2. Swift3新路程1switch case

    上面的写法是正确的,编译不会报错,因为switch对所有的case做出了列举下面的写法是错误的,编译会报错,因为switch没有所有的case做出列举,需要添加default分支

  3. swift3新路程2...<和...

    上面1的输出是:0123...:包含开始和结束值。

  4. swift3新路程4数组和字典array/dictionary

    输出["LiuMC","Ryoma"]["LiuMC":27,"Ryoma":27]names是一个数组nameWithAge是一个字典创建空的数组和字典:varemptyArray=[String]()varemptyDictionary=[String:Int]()如果类型可以推断的话我们可以写成:varemptyArray=[]varemptyDictionary=[:]

  5. swift3新路程5? 和 ??

    是说当前生命的变量是可能有值,也有可能为nil?可以规避实例为nil时,调用实例方法报错的现象,instance?.method当instance是nil的时候因为instance是可选类型,所以语句会直接忽略后面的不在执行,故而不会出现异常(?前面的值为nil时,?是用来提供一个默认值,如果前面的值是nil那么就会使用??提供的默认值输出Helloswift

  6. swift3新路程9结构体和类

    Usestructtocreateastructure.Structuressupportmanyofthesamebehaviorsasclasses,includingmethodsandinitializers.Oneofthemostimportantdifferencesbetweenstructuresandclassesisthatstructuresarealwayscopiedw

  7. swift3新路程15别名alias、元组tuple

    别名根据自己的需要可以将已有的类型进行别名命名语法元组元组可以将多个类型的值聚合起来上面就是一个元组,包含了404和”NotFound“两个元素如果想分解元组的话我们可以这样:如果说我们只想用statusCode的话我们可以使用下划线代替statusMessage,忽略这个值同样我们也可以使用类似下标的形式访问我们也可以给元组里面的元组定义标签这样我们使用的时候就可以直接使用名字进行访问了

  8. swift3新路程16nil、optional values和强拆包!

    nil不可以用在不是可选值的常量和变量中如果说一个常量或者变量会是可能没有的值得情况的话我们应该将他作为可选值进行声明如果我们声明了一个可选值,但是我们没有对它进行初始化的话,他的默认值就是nilswift中的nil和objective-c中的nil是不一样的OC中nil是一个指针只想一个不存在的值swift中nil不是指针,他只是表明这个变量会有nil的情况,swift中任何类型都可以被定义为可

  9. php – 如何为yii2 ListView小部件使用自定义过滤器?

    在我的控制器中,我渲染了$dataProvider这是StudentSearch的搜索功能在视图中,我在ListView小部件中使用了$dataprivider,如下所示在’_student_list.PHP’中,我列出了学生我的过滤器现在我希望按名字或年龄筛选学生.我怎样才能做到这一点?如果您有任何解决此问题的方法,请提供帮助.谢谢.1)在您的视图中添加过滤器表单:2)根据收到的GET参数准备StundentSearch模型以返回dataProvider.必须在规则中指定这些属性才能大规模分配它们.

  10. 将对象从控制器传递给angularjs指令

    总结以上是DEVMAX为你收集整理的将对象从控制器传递给angularjs指令全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部