# 4/7 (四) 基本資料類別 |Swift|Kotlin| |---|---| |struct| data class | |class| class| | x | abstract class | |protocol| interface = abstrat class| |enum| enum class = sealed class | |optional| x | |!| lateinit | | !! (nonNull)| 補充: https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html struct <---- value type class <---- referenece type ### 常數變數 ```swift= let pi = 3.14 var num = 123 pi = 345 // 不行 num = 456 // 可以 ``` - 變數可以分為 get & set / get only - get only 有個名字,叫 computed variable ### 基本的 class 這樣宣告 ```swift= class KKSAVPlayer : NSObject { var state: KKSAVPlayerState var player: AVPlayer! var playerLayer: AVPlayerLayer! var masterPlaylist: ManifestMasterPlaylist? var duration: TimeInterval var currentTime: TimeInterval } ``` KKSAVPlayer 繼承 NSObject ### protocol * protocol 等於 Java 的 Interface * Swift 的 protocol 可以繼承 protocol * extension protocol 可以有預設的實作 ```swift= protocol AppEnvProtocol { var castApplicationId: String { get } var envName: String { get } } struct DevelopEnv: AppEnvProtocol { var castApplicationId: String { return "F26E7D83" } var envName: String { return EnvName.develop.rawValue } } struct ReleaseEnv: AppEnvProtocol { var castApplicationId: String { return "DC01DFFB" } var envName: String { return EnvName.release.rawValue } } struct MasterEnv: AppEnvProtocol { var castApplicationId: String { return "365A05A2" } var envName: String { return EnvName.master.rawValue } } ``` ### enum ```swift= enum APIError { case none case specifyArgumentNotFound case internalServerError case unauthorizedToPlay case reachTheDeviceLimit } let error: APIError = .reachTheDeviceLimit ```