【问题标题】:what is difference between [Classname]() and Classname() in swift?swift中的[Classname]()和Classname()有什么区别?
【发布时间】:2018-03-21 10:18:51
【问题描述】:

我想知道两者的区别

    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
}

谁能详细描述和区分两者?

【问题讨论】:

  • “arr”是“ExamCategory”类的单一对象类型,“arrExamCategories”是“ExamCategory”类的对象数组。
  • 好的,但是我们可以将数组存储到单个对象类型的类“ExamCategory”中那么为什么我们要像第二个一样声明呢? @YagneshDobariya,哪个更好?
  • 你可以,但是它仍然是单个对象包含数组,另一个是数组包含单个对象,它的不同
  • @Tj3n 哪个更好用?你说另一个是使用元素数组,而第一个是单个元素。
  • @Jitendra Modi。它是由你决定。如果您需要管理一个对象,那么第一个对象会更好。并且假设您需要管理多个同类对象,那么第二个对象会更好。当您对单个对象使用第二个时,您需要每次都从数组索引中获取对象,同时您想要对其执行一些操作。

标签: ios arrays swift class initialization


【解决方案1】:

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

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

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

var arr = ExamCategory() 

while...
[ExamCategory]()ExamCategory 类型的数组初始化器。它(可以/必须)持有/存储类ExamCategory或其子类的实例。

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

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

这是Initializationarray (Collection Types) 的苹果文档

【讨论】:

    【解决方案2】:
    var arr = ExamCategory() 
    

    这意味着:ExamCategory 类已经被初始化,并且这个类的引用已经存储在 arr 变量中。

    var arrExamCategories = [ExamCategory]()
    

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

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

    更多详情请参考苹果的swift文档。

    【讨论】:

    • @JitendraModi 两者非常不同,没有可比性。
    • 要创建一个 ExamCategory 类的数组,var arrExamCategories = [ExamCategory]() 将使用。并且要将对象存储在数组中,首先您需要使用 var arr = ExamCategory() 创建一个 ExamCategory 类的对象。并确保两者是不同的东西。
    • 好的,我知道两者是不同的,但这里有一个像 [ExamCategory]() 只存储数组的情况,这意味着它是一个修复类型的变量。我们只能将数组存储到其中。但是现在在 ExamCategory() 中,您可以存储任何内容,因为它的类型不是固定的,单个对象。存储任何你想要的东西。那么,让我知道你对此有何看法? @Krunal
    • @JitendraModi 我认为,您应该阅读 Apple 文档/教程以了解更多细节和两者之间的区别。
    • Jitendra 请先阅读 Apple 的文档/教程。然后你就会理解整个概念。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2013-04-12
    • 2021-11-20
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多