Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う...

Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift

Avatar for Elvis Shi

Elvis Shi

June 24, 2025
Tweet

More Decks by Elvis Shi

Other Decks in Programming

Transcript

  1. } var employedBy = "YUMEMI Inc." var job = "iOS

    Developer" var organizerOf = "HAKATA.swift" var favoriteLanguage = "Swift" var twitter = "@lovee" var qiita = "lovee" var github = "el-hoshino" var additionalInfo = """ ࠓ೔͔Β iPhone ͰϚΠφϯόʔΧʔυ͕ ࢖͑ΔΑ͏ʹͳͬͨΑʂ iOS 26 Developer Beta 2 ΋ϦϦʔεͨ͠Αʂ """ final class Me: Developable, Talkable {
  2. enum LoginMethod { case userID case sns } IUUQTXXXTXJGUPSHEPDVNFOUBUJPOBQJEFTJHOHVJEFMJOFTHFOFSBMDPOWFOUJPOT //

    શͯେจࣈͷུশͷ৔߹ var utf8Bytes: [UTF8.CodeUnit] var isRepresentableAsASCII = true var userSMTPServer: SecureSMTPServer // ಄จࣈ͚ͩେจࣈͷུশͷ৔߹ var radarDetector: RadarScanner var enjoysScubaDiving = true
  3. enum LoginMethod { case userID case sns } func login(method:

    LoginMethod) { // do something } login(method: LoginMethod) 4XJGUͷϝιου͸Ҿ਺ʹϥϕϧΛ෇༩Ͱ͖·͢ɺ ͦΕʹΑΓݺͼग़͕͠ಡΈ΍͘͢ͳΔ͜ͱ͕ଟ͍Ͱ͢
  4. enum LoginMethod { case userID case sns } func login(with

    method: LoginMethod) { // do something } login(with: LoginMethod)
  5. enum LoginMethod { case userID case sns } func login(with

    method: LoginMethod) { // do something } login(with: LoginMethod.userID) 4XJGU͸ܕ͕ਪ࿦Ͱ͖Δ৔߹ɺ Θ͟Θ͟ܕΛॻ͔ͳͯ͘΋େৎ෉Ͱ͢
  6. enum LoginMethod { case userID case sns } func login(with

    method: LoginMethod) { // do something } login(with: .userID)
  7. struct ConnectionOption: OptionSet { // ... static let customDnsIpTable: Self

    // ... } struct ConnectionOption: OptionSet { // ... static let customDNSipTable: Self // ... } struct ConnectionOption: OptionSet { // ... static let customDNSIPtable: Self // ... } struct ConnectionOption: OptionSet { // ... static let customDNSIPTable: Self // ... } ΫΠζ 4XJGU"1*%FTJHO(VJEFMJOFTʹԊͬͨม਺໊͸ʁ
  8. struct ConnectionOption: OptionSet { // ... static let customDnsIpTable: Self

    // ... } struct ConnectionOption: OptionSet { // ... static let customDNSipTable: Self // ... } struct ConnectionOption: OptionSet { // ... static let customDNSIPtable: Self // ... } struct ConnectionOption: OptionSet { // ... static let customDNSIPTable: Self // ... } ΫΠζ ౴͑߹Θͤ
  9. func handle(option: ConnectionOption) { if (option.contains(ConnectionOption.customDNSIPTable)) { // ... }

    } ಡΈ΍͍͢ϥϕϧΛ ͚ͭΒΕΔ ׅހ͕ඞཁͳ͍ ਪ࿦Ͱ͖Δ͔Βܕ΋ཁΒͳ͍ ΫΠζ Լهͷ࣮૷ΛΑΓ4XJGUΒ͘͢͠Δʹ͸ʁ
  10. func handle(_ option: ConnectionOption) { if option.contains(.customDNSIPTable) { // ...

    } } let userOption: ConnectionOption = // ... handle(userOption) ΫΠζ ౴͑߹Θͤ
  11. struct UserData { internal func doSomething() { // ... }

    } 4XJGU͸σϑΥϧτείʔϓ͕JOUFSOBM͔ͩΒ جຊΘ͟Θ͟internal͚ͭΔඞཁ͸ͳ͍
  12. public struct UserData { func doSomething() { // ... }

    } QVCMJDએݴͷܕͷதͰ΋ಉ͘͡ σϑΥϧτείʔϓ͸JOUFSOBMͰ͢
  13. public struct UserData { // ... } public extension UserData

    { internal func doSomething() { // ... } } །Ұͷྫ֎͸QVCMJDͳ֦ு಺͚ͩ σϑΥϧτείʔϓ΋QVCMJDͰ͢ ͕ʜΘ͟Θ͟͜Μͳ͜ͱ΍Δʜʁ
  14. public struct UserData { // ... } extension UserData {

    func doSomething() { // ... } } ͜ΕͰ͍͍ΑͶʜʁ
  15. struct UserData { let nickName: String let level: Int }

    structͷϓϩύςΟʔ͸ جຊvarએݴͰ໰୊ͳ͍
  16. struct UserData { var nickName: String var level: Int }

    struct UserView: View { @State private var userData: UserData = //... var body: some View { VStack { TextField("Nick Name", text: $userData.nickName) } } } @Stateͷঢ়ଶʹର͠$Ͱ؆୯ʹ ૒ํ޲όΠϯσΟϯά͕࡞ΕΔ
  17. struct UserData { let id: UUID var nickName: String var

    level: Int } ݸਓతྫ֎ มߋ͍ͨ͠͸໌ࣔతʹΠϯελϯεΛ࠶ੜ੒ͯ͠΄͍͠ ϓϩύςΟʔʹ͚ͩletΛ࢖͍·͢
  18. struct UserData { let id: UUID var nickName: String var

    level: Int } struct UserView: View { @State private var userData: UserData = // var body: some View { VStack { TextField("Nick Name", text: $userData.nickName) TextField("ID", text: $userData.id) } } } $BOOPUBTTJHOUPQSPQFSUZJEJTBMFUDPOTUBOU