<font color="#8A2BE2">[Udemy IOS Angela]</font> Ch4 Swift 程式基礎 常數、變數
===
# Ch4
## intro
:::success
shell/terminal/command line/bash
:::
## 36. How to design your app

常壓option按鈕+移動 = 複製

壓control 把Main/ViewController/裡面的圖 -> 拉到 code裡面建立
```swift=
@IBOutlet weak var diceImageView2: UIImageView!
```
```swift=
Who.What(屬性) = Value
```
```swift=
#imageLiteral(
```
```swift=
override func viewDidLoad() {
Code goes here
}
```
## 38. Responding to User Interactions with IBActions
```swift=
@IBAction func rollButtonPressed(_ sender: UIButton) {
diceImageView1.image = #imageLiteral(resourceName: "DiceFour") //變成 #imageLiteral(
diceImageView2.image = #imageLiteral(resourceName: "DiceFour")
print("Button got tapped.") //“”only
}
```

## 40. [Swift Deep Dive] Naming Conventions, Commenting and String Interpolation
:::success
駝峰是命名
//備註方法
:::
```swift=
語法
print("Text \(2+3) Text")
範例
print("Hello \(2+3) Word") //Hello 5 Word
範例
print("The result of 5 + 3 = \(2+3)") //The result of 5 + 3 = 5
```
### 陣列
```swift=
[元素1, 元素2, 元素3, 元素4] [選第幾個元素]
```

:::danger
按Roll 骰子2
按Roll 骰子3
按Roll 骰子4
按Roll 骰子5
按Roll 骰子6
```swift=
//類
class ViewController: UIViewController {
//變數
var leftDiceNumber = 1 //變數 = 數字
//函式
@IBAction func rollButtonPressed(_ sender: UIButton) {
// 左邊的骰子 陣列 陣列內第幾個
diceImageView1.image = [ #imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix") ] [leftDiceNumber]
leftDiceNumber = leftDiceNumber + 1
}
}
```

:::
:::success
按Roll 骰子2
按Roll 骰子一樣....
```swift=
//類
class ViewController: UIViewController {
//函式
@IBAction func rollButtonPressed(_ sender: UIButton) {
// 左邊的骰子 陣列 陣列內第幾個
//變數
var leftDiceNumber = 1 //變數 = 數字
diceImageView1.image = [ #imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix") ] [leftDiceNumber]
leftDiceNumber = leftDiceNumber + 1
}
}
```

:::
## 41. Storing Data using Variables and Arrays
:::success
建立一個函式,按一次Roll 左邊+1 右邊-1
```swift=
class ViewController: UIViewController {
var leftDiceNumber = 1 //起始變數 = 數字
var rightDiceNumber = 5 //起始變數 = 數字
@IBAction func rollButtonPressed(_ sender: UIButton) {
// 左邊的骰子 陣列 陣列內第幾個(index)
diceImageView1.image = [ #imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix") ] [leftDiceNumber]
// 右邊骰子
diceImageView2.image = [ #imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix") ] [rightDiceNumber]
leftDiceNumber = leftDiceNumber + 1 //左骰子+1
rightDiceNumber = rightDiceNumber - 1 //右骰子-1
}
```

:::
## 42. [Swift Deep Dive] Variables
```swift=
var a = 5
var b = 8
var temp = 5
print("The value of a is\(a)")
print("The value of a is\(b)")
a = b
b = temp
print("The value of a is\(a)")
print("The value of a is\(b)")
```

## 43. [Swift Deep Dive] Arrays
```swift=
var numbers = [45, 73, 195, 53]
//寫法1
var numbers0 = numbers[0]
var numbers1 = numbers[1]
var numbers2 = numbers[2]
var numbers3 = numbers[3]
var computedNumbersArray = [numbers0*numbers1, numbers1*numbers2, numbers2*numbers3]
print("computedNumbersArray 是 \(computedNumbersArray)") //computedNumbersArray 是 [3285, 14235, 10335]
//寫法2
var computedNumbers = [45*73, 73*195, 195*53]
print("computedNumbers 是 \(computedNumbers)") //computedNumbers 是 [3285, 14235, 10335]
```

## 44.
初始code
```swift=
//
// ViewController.swift
// Dicee-iOS13
//
// Created by Angela Yu on 11/06/2019.
// Copyright © 2019 London App Brewery. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var diceImageView1: UIImageView! //用control拉進來
@IBOutlet weak var diceImageView2: UIImageView!
var leftDiceNumber = 1 //起始變數 = 數字
var rightDiceNumber = 5 //起始變數 = 數字
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//WHO WHat VALUE
diceImageView1.image = #imageLiteral(resourceName: "DiceThree") //變成 #imageLiteral(
diceImageView1.alpha = 0.5; //變淡
diceImageView2.image = #imageLiteral(resourceName: "DiceTwo")
}
@IBAction func rollButtonPressed(_ sender: UIButton) {
// print("左邊骰子點數目前是\(leftDiceNumber)")//目前骰子點數
// 左邊的骰子 陣列 陣列內第幾個(index)
diceImageView1.image = [ #imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix") ] [leftDiceNumber]
// 右邊骰子
diceImageView2.image = [ #imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix") ] [rightDiceNumber]
leftDiceNumber = leftDiceNumber + 1 //左骰子+1
rightDiceNumber = rightDiceNumber - 1 //右骰子-1
// print("左邊骰子點數目前是\(leftDiceNumber)")//印出+1後骰子點數
}
}
```
```swift=
隨機數字
print(Int.random(in: 1...10)) //整數.隨機(在1...到10)
```
:::success
```swift=
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var diceImageView1: UIImageView! //用control拉進來
@IBOutlet weak var diceImageView2: UIImageView!
@IBAction func rollButtonPressed(_ sender: UIButton) {
// 左邊的骰子 陣列 『選取』陣列內第幾個(index)
// 『選取』整數.隨機(在1...到10)
diceImageView1.image = [ #imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix") ] [Int.random(in: 1...5)]
// 右邊骰子
diceImageView2.image = [ #imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix") ] [Int.random(in: 1...5)]
}
}
```

:::
### Xcode命名方式
```swift=
var x= [0,1,2] //報錯,等號左邊無空格,等號右邊有空格,不行這樣寫
var x=[0,1,2] //可以,使用無空格
var x = [0,1,2] //可以,使用有空格
```
### 不要用骰子圖
:::success
```swift=
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var diceImageView1: UIImageView! //用control拉進來
@IBOutlet weak var diceImageView2: UIImageView!
@IBAction func rollButtonPressed(_ sender: UIButton) {
var diceArray = [#imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix")] //建立陣列變數
// 左邊的骰子 = 陣列 『選取』陣列內第幾個(index)
// 『選取』整數.隨機(在1...到10)
// 使用建立的變數
diceImageView1.image = diceArray[Int.random(in: 1...5)]
// 右邊骰子
diceImageView2.image = diceArray[Int.random(in: 1...5)]
}
}
```

:::
### Var(可改變的) 與 let(不可改變的)
```swift=
let x = 2
x = 3 //報錯,因為在swift中,let是『不可以』改變的
var x = 2
x = 3 //正確,因為在swift中,var是『可以』改變的
```
### Int.random(in:0...5) = .randomElement(in:0...5)
```swift=
這兩種寫法是一樣的
//寫法1
diceImageView1.image = diceArray.randomElement()
//寫法2
diceImageView1.image = diceArray[Int.random(in: 1...5)]
```
## 45. How to Solve the Error: "Maximum number of apps for free development reached" ?
The easiest solution is to simply delete the existing apps you've got on your iPhone/iPad.
## 46. [Swift Deep Dive] Constants, the Range Operator and Randomisation
### data type
Int 1(整數Interger)
float 12.345(浮點數Floating Point Number)
Double 3.14159265359....(雙精度浮點數) ex600個小數點
Bool True/False (布林Boolean)
### 隨機整數
```swift=
隨機1~3
Int.random(in: lower ... upper)
let randomNumber = Int.random(in: 1 ... 3) //隨機1~3
print(randomNumber)
隨機1~2,不包含3
Int.random(in: lower ..< upper)
let randomNumber = Int.random(in: 1 ..< 3) //隨機1~2,不包含3
print(randomNumber)
```
### 隨機布林
```swift=
Bool.random()
```
### 陣列內元素隨機前後調整
```swift=
array[Int.random(in: 1 ... 5)]
array.randomElement()
array.shuffle()
```
### 小挑戰
:::success
Array[Int.random(in: lower...Upper)]
```swift=
//Test
let alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
//print(alphabet.())
let password1 = alphabet[Int.random(in: 0...26)] //陣列中抽出 隨機第一個英文
let password2 = alphabet[Int.random(in: 0...26)] //陣列中抽出 隨機第二個英文
let password3 = alphabet[Int.random(in: 0...26)]
let password4 = alphabet[Int.random(in: 0...26)]
let password5 = alphabet[Int.random(in: 0...26)]
let password6 = alphabet[Int.random(in: 0...26)]
let password = password1+password2+password3+password4+password5+password6 //英文做連接
print("密碼是: \(password)") //印出
```

:::
:::info
Array.randomElement()!
```swift=
//Test
let alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
//print(alphabet.())
let x = alphabet.randomElement()! + alphabet.randomElement()! + alphabet.randomElement()! + alphabet.randomElement()! + alphabet.randomElement()! + alphabet.randomElement()!
print("密碼是: \(x)")
```

:::
### 編碼練習3
用變數(不可更動)算出一小時有幾秒鐘
```swift=
func exercise() {
//Write your code here.
let secondsInAnHour = 60*60
//Don't change the code below.
print(secondsInAnHour) //3600
}
```
### 編碼練習4
```swift=
func exercise() {
//The number of letters in alphabet equals 26
let alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
// 🚨 Don't change the code above 👆
//####################################
//Write your code below this line 👇
let password = alphabet[Int.random(in: 0 ... 26)] +
alphabet[Int.random(in: 0 ... 26)] +
alphabet[Int.random(in: 0 ... 26)] +
alphabet[Int.random(in: 0 ... 26)] +
alphabet[Int.random(in: 0 ... 26)] +
alphabet[Int.random(in: 0 ... 26)]
print(password)
}
```
###### tags: `[Udemy IOS Angela Yu]`