2017-10-07 72 views
-2

我有我的代碼在下面,我試圖創建新的數組,每當用戶添加一本書時,元素中的數字加1。例如,當用戶已經有1本書加時,他又增加了一個數組應爲["bookTitle2,"bookAuthor2", "bookPublisher2", "bookNumOfPages2"]如何在同一個數組中添加具有相同結束數的元素? (Swift 3)

let bookDetails = ["bookTitle", "bookAuthor", "bookPublisher", "bookNumOfPages"] 
var bookDetail = "" 
var bookNumber = Int() 
var bookNumArray = [Int]() 

if bookNumArray.contains(bookNumber) { 

print("Book already exists") 

} else { 

while bookNumber < 2 { 

    bookNumber += 1 

    bookNumArray.append(bookNumber) 

    for detail in bookDetails { 

     bookDetail = "\(detail)" + String(bookNumber) 

     let newBookArray = [bookDetail] 

     print(newBookArray) 


    } 

} 


    } 

當我運行上面的代碼,這反而說明了:

["bookTitle1"] 
["bookAuthor1"] 
["bookPublisher1"] 
["bookNumOfPages1"] 
["bookTitle2"] 
["bookAuthor2"] 
["bookPublisher2"] 
["bookNumOfPages2"] 

所以我想要所有以1結尾的字符串和另一個數組中以2結尾的字符串。

+0

還不清楚! :( – Roy

+0

你試過字典嗎? – Roy

+0

問題在於你把整個編號附加到名字上的想法,比如在'「bookTitle1」'中,是一個糟糕的模型。使用一個名字是鍵的字典,值是(直方圖) – matt

回答

0

當你這樣做:

for detail in bookDetails { 

    bookDetail = "\(detail)" + String(bookNumber) 

    let newBookArray = [bookDetail] 

    print(newBookArray) 
} 

對於每次迭代,您將創建一個新數組,其中包含當前詳細信息,例如bookTitle到您的字符串var bookDetail的數組中,並在此循環範圍之外聲明。

另外請注意,newBookArray是一個局部變量,所以當它離開循環時它會被銷燬。您需要一組bookDetail來存儲newBookArray

let bookDetails = ["bookTitle", "bookAuthor", "bookPublisher", "bookNumOfPages"] 
var bookDetailArray : [Array<String>] = [] //Your array to store all the bookDetails 
var bookDetail : [String] = [] //Your array to store a bookDetail 
var bookNumber = Int() 
var bookNumArray = [Int]() 

然後,你可以這樣做:

bookDetail.removeAll() //Clear all objects before appending new one 

for detail in bookDetails { 

    bookDetail.append("\(detail) + String(bookNumber)") 
} 

bookDetailArray.append(bookDetail) 

只是一個建議:正如其他人表示,對於bookDetail性質字典或一類是你的情況更好的模式。如果您打算使用某個類,請閱讀面向對象編程。

+0

謝謝!我一定會看到這些話題,但你幫我解決了我的問題,所以我真的很感激:) – acoustickat

+0

@acoustickat沒問題,很高興幫助:) – iamhx

0

我會做一本字典或創建一個類BookDetails的屬性,如bookTitle,bookAuthor等,然後我會創建一個這個類的實例的數組。

如果你想要做你的方式,爲什麼不創建一個雙向陣列,是這樣的:

var arrayFinal = [[""]] 
var bookNumber = 0 

// Whenever the action is triggered 

bookNumber += 1 

var bookDetails = ["bookTitle", "bookAuthor", "bookPublisher", "bookNumOfPages"] 

for detail in bookDetails 
{ 
    detail = "\(detail) +\(bookNumber)" 
} 

arrayFinal.add(bookDetails) 

或者類似的東西...

+0

謝謝!我會嘗試字典:) – acoustickat

+1

@acoustickat更好地創建一個結構,你需要的屬性 –

相關問題