2017-10-07 73 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更好地创建一个结构,你需要的属性 –

相关问题