# 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" } ```