簡體   English   中英

如何將元素添加到 Swift 中的自定義對象數組

[英]How to add elements to an array of custom objects in Swift

我正在使用此代碼將自定義對象添加到數組,然后在自定義 TableView 中顯示該數據。

var tempCount = self.people?.count
for var k = 0 ; k < tempCount ; k++
{
    if let PERSON = self.people?[k]
    {
        let name = (PERSON.compositeName != nil) ? PERSON.compositeName  : ""
        let number = (PERSON.phoneNumbers?.first?.value != nil) ? PERSON.phoneNumbers?.first?.value : ""
        let image = (PERSON.image != nil) ? PERSON.image : UIImage(named: "aks.jpg")
        let details = Contact(userImage: image!, userName: name!, phoneNumber: number!)

        println(details.userName + "  " + details.phoneNumber)
        self.arrayOfContacts?.append(details)
        println(self.arrayOfContacts?.count)
    }
}

由於某種原因,數組中元素的計數似乎總是“nil”。 我已按以下方式聲明數組

    var arrayOfContacts:[Contact]?

, Contact 是數組應該包含的對象類型。

而另一個作為

    var people : [SwiftAddressBookPerson]? = []

打印語句確實給出了結果,但對象永遠不會被添加到數組中。

關於我做錯了什么的任何想法都會非常有幫助。

您的數組被聲明為 Optional 數組,但未創建,因此它是nil

您的聲明:

var arrayOfContacts:[Contact]?

添加創建一個實際的空數組:

arrayOfContacts = []

或者一次完全創建它:

var arrayOfContacts:[Contact]? = []

你的arrayOfContacts 是nil,所以arrayOfContacts?.count .count 也是nil。

如果你真的想附加到 arrayOfContacts,不要寫self.arrayOfContacts?.append(details)因為這意味着“附加到 arrayOfContacts 但實際上我並不在乎,如果 arrayOfContacts 為零,就放棄”。

相反,寫self.arrayOfContacts!.append(details) ,因為現在這意味着“附加到 arrayOfContacts,而且因為我真的很在意,請大聲告訴我,有致命的崩潰錯誤,當 arrayOfContacts 為零時,因為我會必須弄清楚為什么這個數組在不應該是 nil 的時候卻是 nil。我的意思是,我是機器的主人,而不是相反,我很清楚當我想追加時,arrayOfContacts 不應該是 nil到它。”

通常,當您處理數據時,您不僅擁有固定數量的元素。 以一個程序為例,您可以計算一個班級中多個成績的平均值:

var grade1 = 4
var grade2 = 3

var average = Double(grade1 + grade2) / 2.0
println("Average grade: \(average)")

如果我們希望該程序在我們有 3 個成績時也能運行怎么辦? 我們必須更改我們的程序以使用 3 個年級。

var grade1 = 4
var grade2 = 3
var grade3 = 5

var average = Double(grade1 + grade2 + grade3) / 3.0
println("Average grade: \(average\)")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM