swift中[Classname]()和Classname()有什么区别?

时间:2017-10-10 05:50:43

标签: ios arrays swift class initialization

我想知道

之间的区别
    var arr = ExamCategory() 
             &
    var arrExamCategories = [ExamCategory]()

请问为什么这个被宣布为这样,哪个应该更好用?

我的ExamCategory课程是这样的。

class ExamCategory: NSObject {

    var CategoryId: Int?
    var CategoryName:String?
    var TotalSection: Int?
    var ImageUrl: String?

    override init() {

    }

    init(dict:[String:Any]) {
        super.init()

        CategoryId = dict["categoryId"] as? Int
        CategoryName = dict["categoryName"] as? String
        TotalSection = dict["totalSection"] as? Int
       ImageUrl = dict[""] as? String
    }
  .....And So On
}

任何人都能详细描述和区分两者吗?

2 个答案:

答案 0 :(得分:2)

两者都有不同的用法,它们无法相互比较。当您需要存储多个元素时,您应该使用数组,但如果您需要单个元素,则应选择单个默认初始化器。这取决于你的需要。根据它们在快速编程中的用法,两者都是最好的。

ExamCategory()是您的类的默认初始值设定项,当使用带有圆形backets()的classname调用时,会为您的类调用init(),并返回您的类的实例。

在您的示例ExamCategory()中调用类ExamCategory的初始化程序,并返回该类的一个实例,您已将其存储在var arr

var arr = ExamCategory() 

...而
[ExamCategory]()是类型ExamCategory的数组初始值设定项。它(可以/必须)保存/存储类ExamCategory或其子类的实例。

在您的示例中,[ExamCategory]()ExamCategory元素的数组。您可以在此数组中的var arr上方插入/添加。

var arrExamCategories = [ExamCategory]()
arrExamCategories.append(arr)

以下是Initializationarray (Collection Types)

的Apple文档

答案 1 :(得分:0)

var arr = ExamCategory() 

这意味着:ExamCategory类已初始化,此类的引用已存储在arr变量中。

var arrExamCategories = [ExamCategory]()

这意味着:您已初始化一个包含ExamCategory类对象的数组。

ex: arrExamCategories.append(arr) // var arr = ExamCategory()

有关详细信息,请参阅apple的swift文档。