NSObject和Struct之间的区别

NSObject和Struct之间的区别,struct,swift,ios8,Struct,Swift,Ios8,我想知道NSObject和struct之间的区别。下面的示例将解释这两种情况 在结构中 struct UserDetails{ var userName:String var userID:String var userAge:String func userDescription()->String{ return "name " + userName + "age " + userAge } } 在NSObject类中 clas

我想知道
NSObject
struct
之间的区别。下面的示例将解释这两种情况

在结构中

struct UserDetails{
    var userName:String
    var userID:String
    var userAge:String
    func userDescription()->String{
        return "name " + userName + "age " + userAge
    }
}
NSObject
类中

class UserDetails: NSObject {
    var userName:String?
    var userID:String?
    var userAge:String?
    func userDescription()->String{
        return "name " + userName! + "age " + userAge!
    }
}
你能告诉我在哪里我必须使用
NSObject
class,在哪里我必须使用
struct
。?

1)struct是按值传递的,类实例是按引用传递的 2) 类可以是子类,结构不能

该类是否为NSObject的子类(大部分)无关紧要。你也可以说:

class UserDetails {
    var userName:String?
    var userID:String?
    var userAge:String?
    func userDescription()->String{
        return "name " + userName! + "age " + userAge!
    }
}

Swift中的类和结构比许多语言中的更接近。两者都可以有属性、方法、初始值设定项、下标,可以符合协议,并且可以扩展。但是,只有类可以利用继承并使用deinitializer,因为类是通过引用使用的,所以可以对特定实例有多个引用


结构在Swift中使用——数组、字典、所有可选内容,以及更多内容都是基于
struct
类型构建的,因此性能应该非常高。只要不需要类提供的继承或多个引用,就可以使用
struct

我不确定其中有多少内容,这实际上是一个设计决策。如果您需要子类化,那么类就是一种方法。如果您知道您永远不会子类化,那么您可以使用Struct.none。两者的性能都有好的方面和坏的方面,这取决于具体情况(类需要引用计数、指针间接寻址和内存分配,但结构需要复制)。@Grimxn换句话说,如果你到处传递大量的结构,它们将比对象慢得多,并且使用的内存也会大大增加。如果您不经常传递它们,那么结构将更快,使用更少的RAM。基本上,如果你的代码太慢或者使用太多内存,你应该考虑测试另一个。@ NeXACT,我对你的用法感到困惑:“你只能通过指针来操作它们”,因为(尽管有下面的表示)Swift的一个主要主题是在使用该语言时从开发人员的语义中删除指针的概念。@Grimxn:无论您如何称呼它们,它们都是指针。指针=指向某物的某物。“引用类型”是指其值为引用(指针)的类型。哪一个将占用更多内存?
可选
实际上是一个
枚举
,但它们类似于
结构
s