Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions docs/swift-learning-2/6-arrays/1-storing-information.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,31 @@
# TODO
# 儲存資訊

TODO:TODO
目標:將新的項目加入陣列。

## 簡介

TODO
下列程式碼中指定了一個整數陣列,稱為 `rows` 。你的目標是在這個陣列中加入值,來將角色實例放置在關卡世界的每一行。

若要將項目加入陣列,請按下並拖移中括號 `[]` ,或輸入新的值並以逗號分隔。

查詢註解來取得編寫程式碼的相關提示。

>範例
>
> // 這是一條程式碼註解。它會提供程式碼的相關資訊,但 App 不會執行這條註解。

1. 執行程式碼來看看會發生什麼。

2. 在陣列中加入值來將你的角色放置在關卡世界的每個磚塊上。

![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/652c7590-ef26-4fdd-9f25-3dd8f9c46900/public)

## 講解

TODO
若要通關,你要試著在陣列中加入值,讓角色能放置到每個磚塊上。

除此之外,適實的使用註解能讓你更清楚每個段落在做什麼喔!


## 解答

Expand All @@ -23,4 +38,9 @@ placeCharacters(at: rows)

## 後記

TODO
是不是很酷?

當你要在陣列中加入項目時,只需要加入一個逗號和一個與陣列中其他項目類型相符的項目。

請記住,建立特定類型的陣列(例如,整數陣列)之後,這個陣列便不能包含不同類型的項目了(例如 `String` )

30 changes: 25 additions & 5 deletions docs/swift-learning-2/6-arrays/2-iteration-exploration.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,34 @@
# TODO
# 探索反覆運算

TODO:TODO
挑戰:反覆運算陣列,在各個位置放置寶石和開關

## 簡介

TODO
在下方程式碼中,你可以使用 `columns` **陣列**來在關卡世界中的每個直欄放置寶石和開關。此過程叫做**反覆運算**,它可以讓你在陣列中為每個項目執行動作。

>範例
>
>若要反覆運算,請使用 for-in 迴圈,它是一種 **for 迴圈**的類型
>
>```
>for currentColumn in colums {
> world.place(Gem(),atColumn:currentColumn , row:1)
>}
>```
`for-in` 迴圈中會在陣列中替每個**變數**執行程式碼區塊。在上方範例中, `currentColumn` 是儲存 `columns` 陣列中數值的變數。此數值會傳遞到 `place` 方法的 `column` **參數**,以決定要放置寶石的直欄。

每次 `for-in` 迴圈執行時, `currentColumn` 會前往陣列中的下一個項目,直到沒有剩下的項目。

1. 完成會在陣列中反覆運算的的 `for` 迴圈。

2. 在迴圈中,在每個直欄放置寶石和開關。


![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/ff0fc349-2ee3-4ad4-7aa5-4df7baf76800/public)

## 講解

TODO
試著在迴圈中放置寶石和開關,就能輕鬆完成任務了!

## 解答

Expand All @@ -26,4 +44,6 @@ for currentColumn in columns {

## 後記

TODO
現在你學會反覆運算了!

採用**反覆運算**陣列的方式來建構世界,比一次只放置一個項目要快得多。若要反覆運算陣列,請使用 for-in 迴圈為陣列中的每個項目執行動作
32 changes: 27 additions & 5 deletions docs/swift-learning-2/6-arrays/3-stacking-blocks.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,36 @@
# TODO
# 堆疊磚塊

TODO:TODO
目標:在每個角落放置五層磚塊。

## 簡介

TODO
查看下列程式碼。這是一個 `Coordinate` 類型的陣列,而不是 **Int** 值的陣列。
>`Coordinate類型`
>
>`Coordinate` 實例使用 `column` 和 `row` 引數來參照一個位置。
>
>`let corner = Coordinate(column: 3,row: 3)`

你可以使用 `blockLocations` 陣列反覆運算每個座標,並在每個位置上執行某項操作,例如:
>範例
>
>```
>for coordinate in blockLocations{
> world.place(Gem(), at: coordinate)
>}
>```

1. 加入了兩個座標到 `blockLocations` 中,每個座標參照世界中剩於的角落。

2. 使用 `for-in` 迴圈**反覆運算**每個座標,在每個角落放置**五個磚塊**。(你可能需要**嵌套**其他 **for 迴圈**。)


![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/25f474c7-9bc0-4d77-d150-1d4f3faa0200/public)

## 講解
首先,將四個角落的位置加入 `blockLocations` 陣列中。

TODO
接著,試著在迴圈中再加入一個迴圈,並重複執行五次堆疊磚塊的動作,就能輕鬆完成目標!

## 解答

Expand All @@ -32,4 +52,6 @@ for coordinate in blockLocations {

## 後記

TODO
好極了!

你可能已經注意到, `place(item: Item, at:Coordinate)` **方法**採用了 `Coordinate` 類型的輸入,而 `place(item: Item, atColumn: Int, row: Int)` 則採用兩個 **Int** 值。這兩種方法都可以用來放置項目,但在本章節中,你將使用 `place(item: Item, at: Coordinate)` ,因為要配合 `Coordinate` 類型的陣列一起使用。
56 changes: 51 additions & 5 deletions docs/swift-learning-2/6-arrays/4-getting-in-order.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,49 @@
# TODO
# 依序排列

TODO:TODO
目標:將 Blu 、 Hopper 和專家依照身高排序

## 簡介

TODO
你可以使用`陣列`**類型**的一組方法,在**陣列**中加入項目或從中移除項目。
>陣列方法
>
>`remove(at: Int)`。移除**索引**中的一個項目。
>
>`append(newElement: Element)`。在陣列結尾處加入一個項目。
>
>`insert(newElement: Element, at: Int)`。在特定的索引插入一個項目。

使用**點記法**在陣列上呼叫方法。

>範例
>
>`var favoriteFoods = [🌮, 🍓, 🍣, 🍳, 🧀]`
>
>`favoriteFoods.remove(at: 2)`
>
>呼叫`remove(at: 2)`會將🍣從陣列中移除。
>
>`//[🌮, 🍓, 🍳, 🧀]`
>
>`favoriteFoods.insert(🍝,at: 1)`
>
>呼叫`insert(🍝,at: 1)`會在索引1加入🍝。
>
>`//[🌮, 🍝, 🍓, 🍳, 🧀]`

1. 在下方的 `characters` 陣列中,移除傳送門和寶石。

2. 插入一個 `Expert` 類型實例,使角色依照最矮在前(row 0)最高在後的順序排列。


![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/e12033ea-49b9-42ba-58aa-b8b0385a2c00/public)

## 講解

TODO
在開始解題之前,可以先看看目前的程式是如何執行,再想想如何將傳送門和寶石移除

接著再插入角色並將角色進行排序,就可以完成關卡!


## 解答

Expand Down Expand Up @@ -39,4 +72,17 @@ for character in characters {

## 後記

TODO
你學得非常快!

掌握如何使用陣列**索引**存取和修改項目十分好用。

你還可以運用提供給你的其他**方法**來修改陣列:

`removeFirst()`

`removeLast()`

`removeAll()`

嘗試使用這些方法,看看它們如何運作!

30 changes: 25 additions & 5 deletions docs/swift-learning-2/6-arrays/5-appending-to-an-array.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,32 @@
# TODO
# 附加到陣列

TODO:TODO
目標:依據座標屬性來附加到空的陣列。

## 簡介

TODO
將項目個別加入陣列中,存粹是重複性的操作。要是能夠建立一套規則來將座標包含在陣列中呢?

首先,從 `allCoordinates` 開始,這是由關卡世界中所有座標組成的**陣列**。

接著,你需要一個空的陣列,讓這些座標可以附加在其中。由於要**宣告**一個未儲存任何值的陣列,因此需要指定它應該容納的項目**類型**。

>建立空的陣列
>
>在變數名稱後使用:來宣告其類型,然後將它**指定**為空的陣列。
>
>`var newLocations: [Coordinate] = []`

最後,**反覆運算** `allCoordinates` 並檢查每個座標的 `column` 和 `row` **屬性**。如果座標的 `column` 屬性大於5或 `row` 屬性小於4,則將它附加到空的陣列中。然後將六個磚塊放置在陣列中的每個座標上。

![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/35124c1a-b596-4982-fdc3-3724eaa6fd00/public)

## 講解

TODO
首先,要將範圍內的值(座標的 `column` 屬性大於5或 `row` 屬性小於4)加入 `append` 到 blockSet 陣列中。

接著,將 blockSet 陣列中的座標加上6塊磚塊(可用 for-in 迴圈重複執行6次)

就能達成關卡目標了!

## 解答

Expand All @@ -33,4 +49,8 @@ for coordinate in blockSet {

## 後記

TODO
很好!

陣列會引領你走向建構世界的新世界!請記住,你可以建立完全空白的陣列,稍後再向其中加入值,但是你必須指明該陣列包含的項目類型。當你**宣告**陣列時,請使用下列**語法**為它指定類型:

`var placementLocations: [Coordinate]`。
34 changes: 29 additions & 5 deletions docs/swift-learning-2/6-arrays/6-island-builder.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,35 @@
# TODO
# 島嶼建構者

TODO:TODO
挑戰:建構一座四面環海的島。

## 簡介

TODO
厭倦了內陸世界嗎?使用程式碼來創造你自己的島嶼!

首先,建立兩個用來儲存座標的空**陣列**。其中一個儲存島嶼的座標,另一個則儲存海洋的座標。

接著,在 **if 語句**中編寫一組條件,將座標附加到島嶼陣列中。這些座標應該位於地圖的中心,而且可能是3x3或4x4的磚塊。將不符合這些條件的所有座標附加到海洋的陣列中。

>加入水
>
>若要加入水,請先移除現有的磚塊。
>
>`world.removeAllBlocks(at: coordinate)`
>
>`world.place(Water(), at: coordinate)`

將座標附加到每個陣列後,在島嶼陣列的每個座標上放置磚塊,並在海洋陣列的每個座標上放置水。祝你好運!


![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/b1d5dc48-cc83-4128-00fc-de600dc24f00/public)

## 講解

TODO
1. 先建立兩個陣列來存放陸地和海洋的位置

2. 使用 `if-else` 判斷,將陸地和海洋位置分別新增至兩個陣列

3. 在 `for` 迴圈中執行海洋陣列中有的座標位置,並將這些位置的陸地移除並加上水

## 解答

Expand Down Expand Up @@ -43,4 +62,9 @@ for coordinate in sea {

## 後記

TODO
你的能力不斷增強!

你可以使用陣列既快速又有效地管理大量資訊,進而建構精彩的世界。

你有沒有注意到陣列 `allCoordinates` 如何被初始化?你可以使用 world 實例的 `allPossibleCoordinates` **屬性**取得關卡世界中所有座標的陣列,藉此反覆運算每個座標。是不是很酷呢?

Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,4 @@ teamBlu[8].jump()

## 後記

請記住,找出程式錯誤並加以修正,是成為程式設計師不可或缺的重要部分!索引越界錯誤是導至 App 當機的常見錯誤程式之一。設計程式碼時,請隨時檢查你的程式碼,確保沒有嘗試存取陣列中不存在的部分。
請記住,找出程式錯誤並加以修正,是成為程式設計師不可或缺的重要部分!索引越界錯誤是導至 App 當機的常見錯誤程式之一。設計程式碼時,請隨時檢查你的程式碼,確保沒有嘗試存取陣列中不存在的部分。