---
# System prepended metadata

title: 3/30 (三) 變數宣告

---

# 3/30 (三) 變數宣告


## 前情

:::warning

- 下次要準備給對方平台了解的基礎知識
- ~~Kotlin: 有哪些基本型別、他們怎麼使用~~
- Swift: 有哪些基本型別、他們怎麼使用
- OOP 怎麼使用
- strategy pattern 範例
- OOP(object-oriented programming) -> POP (protocol-oriented programming)
- DesignPattern Singleton 怎麼建立？使用他？
- access control

:::

|Swift|Kotlin|
|---|---|
|struct| data class |
|class| class|
| x | abstract class |
|protocol| interface = abstrat class|
|enum| enum class = sealed class |
|optional| x |




## class 分為 instance method & class method

```swift=
class Person {
    static func method1() {
        ...
    }
    func method2() {
        ...
    }
}

// static method 
Person.method1()

// instance method
let bob = Person()
bob.method2()
```


## Data class
```kotlin=
// Kotlin
data class PreloadInput(
    val id: String,
    val contentType: ContentType
)
```


## Variable
- var 是可以修改的變數，有 `get` & `set`
```kotlin=
var currentSubtitle: String? = null
    get() = trackSelectorParameters.subtitle
    set(value) {
        field = value
        applyPreferredTextLanguage(value)
    }
```
    
- val 是不可以修改的常數，但是有 `get`
- const val 是完全的常數，沒有 `get()` 也沒有 `set()`


## constructer 
constructer 的參數如果給 var/val，下面class內容才可以用



## interface
- interface 可以繼承 interface
- interface 通常沒有實作，但是實作是合法的語法
- 最終要有人實作 inferface 的 function (keyword is `override`)
- 跟 Java 一樣的規則，`interface` -> `abstract class` -> `class`



## switch case 

- Swift & Kotlin 都可以不用加 break

```kotlin=
when(type) {
    is Video -> TODO
    is Live -> TODO
    is Offline -> TODO
}
val value: Int? = null
when (value) {
    1 -> {
        qeqweqe
        qeqweqe
    }
    2 ->
    else ->
}
```

```swift=
let score = 100
switch score {
    case 100:
        gogo()
    case 60...99:
        return "great"
    default:
        return "gogo"
}
```


