2017-10-07 11 views
-2

私は以下のコードを持っており、ユーザーがブックを追加するたびに要素の数字が1ずつ増える新しい配列を作成しようとしています。だから、同じ配列内に同じエンディング番号の要素を追加するにはどうすればよいですか? (Swift 3)

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

:彼は別のものを追加したとき、私は上記のコードを実行すると["bookTitle2,"bookAuthor2", "bookPublisher2", "bookNumOfPages2"]

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) 


    } 

} 


    } 

が、これは代わりに現れとして例えば、ユーザがすでに1冊の本が追加されたときに、配列は、読んでください私は、1つの配列で1で終わるすべての文字列と、別の配列で2で終わる文字列がすべて必要です。

+0

まだ不明です! : – Roy

+0

あなたは辞書を試しましたか? – Roy

+0

問題は、 '' bookTitle1''のように名前に数字を付けるという考え方が悪いことです。名前がキーで値が(ヒストグラム) – matt

答えて

0

あなたがない:

for detail in bookDetails { 

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

    let newBookArray = [bookDetail] 

    print(newBookArray) 
} 

繰り返しのたびに、このループの範囲外で宣言された文字列の配列にbookTitleなどの現在の詳細を含む新しい配列を作成しています。

また、newBookArrayはローカル変数であるため、ループから抜けると破棄されることに注意してください。 newBookArrayを格納するには、bookDetailの配列が必要です。

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

bookTitle、bookAuthorなどのプロパティを使って辞書を作成したり、bookDetailsクラスを作成したりして、このクラスのインスタンスの配列を作成します。

あなたはそれをあなたの方法をしたい場合は、なぜ、双方向の配列、のようなものは作成しない:

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あなたが必要とするプロパティを持つ構造体を作成するより良い –

関連する問題