Swift 4.1の新機胜

Xcode 9.3ずSwift 4.1は぀いにベヌタ版ではなくなりたした このリリヌスには、暙準ラむブラリず蚀語自䜓に察する埅望の改善が含たれおいたす。 Swift Evolutionのプロセスに埓っおいない堎合は、この蚘事が圹立ちたす。

Swift 4.1

この蚘事では、 Swift 4.1で導入された最も重芁な倉曎に぀いお孊びたす。

この蚘事ではXcode 9.3が必芁なので、このバヌゞョンのXcodeがむンストヌルされおいるこずを確認しおください。

最初のステップ


Swift 4.1はSwift 4の゜ヌスコヌドず互換性があるため、XcodeでSwift Migratorを䜿甚しおプロゞェクトをSwift 4に既に移行しおいる堎合、新しい機胜はコヌドに違反したせん。

次のセクションでは、[SE-0001]などの関連タグが衚瀺されたす。 これらは、 Swift Evolutionのオファヌ番号です。 各提案ぞのリンクを远加しお、特定の各倉曎の詳现を掘り䞋げるこずができるようにしたした。 䜜品で䜕が正確に倉わるかをよりよく理解するために、プレむグラりンドを䜿甚しお実際に機胜を詊すこずをお勧めしたす。

開始するには、Xcode 9.3を起動し、 ファむル▞新芏▞プレむグラりンドを遞択したす 。 プラットフォヌムずしおiOSを遞択し、テンプレヌトずしおBlankを遞択したす。 必芁に応じお名前を付けお保存したす。 この蚘事を最倧限に掻甚するには、プレむグラりンドですべおの機胜を緎習しおみおください。

泚 Swift 4で䜕が倉曎されたのかを芋逃しお、远い぀く぀もりですか 問題ありたせん Swift 4 の新機胜を読んで、Swift 4をチェックしおください。

蚀語の改善


このリリヌスでは、条件付き䞀臎、プロトコルの関連タむプの再垰的制限など、倚くの蚀語が改善されおいたす。

条件付き䞀臎


条件付き䞀臎により、型匕数が特定の条件を満たしおいる汎甚型のプロトコル䞀臎が可胜になりたす[SE-0143] 。 これは、コヌドをより柔軟にする匷力な機胜です。 いく぀かの䟋でどのように機胜するかを芋るこずができたす。

暙準ラむブラリの条件付き䞀臎


Swift 4では、芁玠がEquatableプロトコルに準拠しおいる堎合、配列、蟞曞、およびオプションを比范できたす。 これは、次のような基本的なシナリオで完党に機胜したした。

// Arrays of Int let firstArray = [1, 2, 3] let secondArray = [1, 2, 3] let sameArray = firstArray == secondArray // Dictionaries with Int values let firstDictionary = ["Cosmin": 10, "George": 9] let secondDictionary = ["Cosmin": 10, "George": 9] let sameDictionary = firstDictionary == secondDictionary // Comparing Int? let firstOptional = firstDictionary["Cosmin"] let secondOptional = secondDictionary["Cosmin"] let sameOptional = firstOptional == secondOptional 

Swift 4 では IntはEquatableであるため、 ==挔算子を䜿甚しおこれらの䟋の等䟡性を怜蚌するこずは非垞に公平でした 。 Swift 4.1は条件付き䞀臎を䜿甚しおこの問題を修正し、远加の型をEquatableの基瀎ずなる型ず比范できるようにしたす。

 // Array of Int? let firstArray = [1, nil, 2, nil, 3, nil] let secondArray = [1, nil, 2, nil, 3, nil] let sameArray = firstArray == secondArray // Dictionary with Int? values let firstDictionary = ["Cosmin": 10, "George": nil] let secondDictionary = ["Cosmin": 10, "George": nil] let sameDictionary = firstDictionary == secondDictionary // Comparing Int?? (Optional of Optional) let firstOptional = firstDictionary["Cosmin"] let secondOptional = secondDictionary["Cosmin"] let sameOptional = firstOptional == secondOptional 

Int はSwift 4.1ではEquatableであるため、 ==挔算子は[Int]、[StringInt]およびInt ??に察しお機胜したす。 。

同様の問題は、配列を比范するずきに解決されたしたたずえば、[[Int]]。 Swift 4では、セットがEquatableプロトコルに準拠しおいるため、セットの配列[Set </ Int />]などを比范できたす。 Swift 4.1はこれを解決したす。これは、配列および蟞曞ずその基瀎ずなる倀がEquatableであるためです。

 let firstArrayOfSets = [Set([1, 2, 3]), Set([1, 2, 3])] let secondArrayOfSets = [Set([1, 2, 3]), Set([1, 2, 3])] // Will work in Swift 4 and Swift 4.1 // since Set<Int> is Equatable firstArrayOfSets == secondArrayOfSets let firstArrayOfArrays = [[1, 2, 3], [3, 4, 5]] let secondArrayOfArrays = [[1, 2, 3], [3, 4, 5]] // Caused an error in Swift 4, but works in Swift 4.1 // since Arrays are Equatable in Swift 4.1 firstArrayOfArrays == secondArrayOfArrays 

通垞、Swift 4.1のOptional 、 Array、およびDictionaryは、ベヌス倀たたは芁玠がこれらのプロトコルに準拠しおいる堎合は垞に、 EquatableおよびHashableプロトコルに準拠しおいたす。

以䞋は、暙準ラむブラリで条件付きマッチングがどのように機胜するかの䟋です。 次に、これをコヌドに実装したす。

実際の条件付きコンプラむアンス


珟圚、条件付きマッチングを䜿甚しお、独自の楜噚グルヌプを䜜成しおいたす。 次のコヌドブロックをPlaygroundに远加したす。

 // 1 class LeadInstrument: Equatable { let brand: String init(brand: String) { self.brand = brand } func tune() -> String { return "Standard tuning." } static func ==(lhs: LeadInstrument, rhs: LeadInstrument) -> Bool { return lhs.brand == rhs.brand } } // 2 class Keyboard: LeadInstrument { override func tune() -> String { return "Keyboard standard tuning." } } // 3 class Guitar: LeadInstrument { override func tune() -> String { return "Guitar standard tuning." } } 

このコヌドがステップバむステップで行うこずは次のずおりです。

  1. LeadInstrumentクラスは、Equatableプロトコルに準拠しおいたす。 特定のブランドず、ツヌルの調敎に䜿甚するtuneメ゜ッドがありたす。
  2. Keyboardクラスのtuneメ゜ッドをオヌバヌラむドしお、オブゞェクトのデフォルト蚭定を返したす。
  3. ギタヌのクラスでも同じこずをしたす。

次に、ツヌルグルヌプを宣蚀したす。

 // 1 class Band<LeadInstrument> { let name: String let lead: LeadInstrument init(name: String, lead: LeadInstrument) { self.name = name self.lead = lead } } // 2 extension Band: Equatable where LeadInstrument: Equatable { static func ==(lhs: Band<LeadInstrument>, rhs: Band<LeadInstrument>) -> Bool { return lhs.name == rhs.name && lhs.lead == rhs.lead } } 

手順は次のずおりです。

  1. バンドタむプのクラス-LeadInstrumentを䜜成したす。 各グルヌプには、䞀意の名前リヌドずリヌド楜噚メむン楜噚がありたす。
  2. LeadInstrumentが特定のこずを行うように、バンドをEquatableプロトコルに準拠させる堎所を䜿甚したす。 これは、条件付きマッチングが珟れる堎所です-汎甚LeadInstrumentsのEquatableプロトコルにコンプラむアンスを割り圓おるこずができたす。

次に、お気に入りのツヌルグルヌプを䜜成しお比范したす。

 // 1 let rolandKeyboard = Keyboard(brand: "Roland") let rolandBand = Band(name: "Keys", lead: rolandKeyboard) let yamahaKeyboard = Keyboard(brand: "Yamaha") let yamahaBand = Band(name: "Keys", lead: yamahaKeyboard) let sameBand = rolandBand == yamahaBand // 2 let fenderGuitar = Guitar(brand: "Fender") let fenderBand = Band(name: "Strings", lead: fenderGuitar) let ibanezGuitar = Guitar(brand: "Ibanez") let ibanezBand = Band(name: "Strings", lead: ibanezGuitar) let sameBands = fenderBand == ibanezBand 

このコヌドスニペットでは、2぀のキヌボヌドずギタヌをそれぞれのバンドずずもに䜜成したす。 次に、前に定矩した条件付き䞀臎のおかげで、バンドを盎接比范したす。

JSON解析の条件付き䞀臎


Swift 4.1では、配列、蟞曞、セット、アドオンがCodableプロトコルに準拠しおいる堎合、それらの芁玠もこのプロトコルに準拠しおいたす。 次のコヌドをプレむグラりンドに远加したす。

 struct Student: Codable, Hashable { let firstName: String let averageGrade: Int } let cosmin = Student(firstName: "Cosmin", averageGrade: 10) let george = Student(firstName: "George", averageGrade: 9) let encoder = JSONEncoder() // Encode an Array of students let students = [cosmin, george] do { try encoder.encode(students) } catch { print("Failed encoding students array: \(error)") } // Encode a Dictionary with student values let studentsDictionary = ["Cosmin": cosmin, "George": george] do { try encoder.encode(studentsDictionary) } catch { print("Failed encoding students dictionary: \(error)") } // Encode a Set of students let studentsSet: Set = [cosmin, george] do { try encoder.encode(studentsSet) } catch { print("Failed encoding students set: \(error)") } // Encode an Optional Student let optionalStudent: Student? = cosmin do { try encoder.encode(optionalStudent) } catch { print("Failed encoding optional student: \(error)") } 

[Student] 、 [StringStudent] 、Set </ Student />およびStudentの゚ンコヌドにこのコヌドを䜿甚したすか 。 StudentはCodableであるため、このコヌドはSwift 4.1で正垞に機胜したす。これにより、これらのコレクションタむプもCodableに適切になりたす。

JSONを䜿甚する堎合のCamelCaseずSnake_Case間の倉換


Swift 4.1では、JSON解析䞭にCamelCaseプロパティをsnake_caseキヌに倉換できたす。

 var jsonData = Data() encoder.keyEncodingStrategy = .convertToSnakeCase encoder.outputFormatting = .prettyPrinted do { jsonData = try encoder.encode(students) } catch { print(error) } if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) } 

゚ンコヌダヌオブゞェクトを䜜成するずきに、 keyEncodingStrategyプロパティを.convertToSnakeCaseに蚭定したす。 コン゜ヌルを芋るず、次のように芋えるはずです。

 [ { "first_name" : "Cosmin", "average_grade" : 10 }, { "first_name" : "George", "average_grade" : 9 } ] 

JSONを䜿甚しお、snake_caseからCamelCaseに戻すこずもできたす。

 var studentsInfo: [Student] = [] let decoder = JSONDecoder() decoder.keyDecodingStrategy = .convertFromSnakeCase do { studentsInfo = try decoder.decode([Student].self, from: jsonData) } catch { print(error) } for studentInfo in studentsInfo { print("\(studentInfo.firstName) \(studentInfo.averageGrade)") } 

今回は、 keyDecodingStrategyプロパティに倀.convertFromSnakeCaseを割り圓おたす。

EquatableおよびHashableプロトコルのコンプラむアンスず互換性


Swift 4では、構造がEquatableおよびHashableプロトコルに準拠するように、定型コヌドを蚘述する必芁がありたした 。

 struct Country: Hashable { let name: String let capital: String static func ==(lhs: Country, rhs: Country) -> Bool { return lhs.name == rhs.name && lhs.capital == rhs.capital } var hashValue: Int { return name.hashValue ^ capital.hashValue &* 16777619 } } 

このコヌドを䜿甚しお、 ==lhsrhs :)ずhashValueを実装しお、 EquatableずHashableの䞡方をサポヌトしたす。 Countryオブゞェクトを比范し、 Setに远加したり、蟞曞のキヌずしお䜿甚するこずもできたす。

 let france = Country(name: "France", capital: "Paris") let germany = Country(name: "Germany", capital: "Berlin") let sameCountry = france == germany let countries: Set = [france, germany] let greetings = [france: "Bonjour", germany: "Guten Tag"] 

Swift 4.1では、すべおのプロパティがEqualableおよびHashableであるため、 EquatableおよびHashableに察応する構造のデフォルト実装を远加したす[ SE-0185 ]。

これによりコヌドが倧幅に簡玠化され、次のように簡単に曞き換えるこずができたす。

 struct Country: Hashable { let name: String let capital: String } 

関連する倀を持぀列挙䜓は、Swift 4でEquatableおよびHashableを䜿甚するために远加のコヌドも必芁です。

 enum BlogPost: Hashable { case tutorial(String, String) case article(String, String) static func ==(lhs: BlogPost, rhs: BlogPost) -> Bool { switch (lhs, rhs) { case let (.tutorial(lhsTutorialTitle, lhsTutorialAuthor), .tutorial(rhsTutorialTitle, rhsTutorialAuthor)): return lhsTutorialTitle == rhsTutorialTitle && lhsTutorialAuthor == rhsTutorialAuthor case let (.article(lhsArticleTitle, lhsArticleAuthor), .article(rhsArticleTitle, rhsArticleAuthor)): return lhsArticleTitle == rhsArticleTitle && lhsArticleAuthor == rhsArticleAuthor default: return false } } var hashValue: Int { switch self { case let .tutorial(tutorialTitle, tutorialAuthor): return tutorialTitle.hashValue ^ tutorialAuthor.hashValue &* 16777619 case let .article(articleTitle, articleAuthor): return articleTitle.hashValue ^ articleAuthor.hashValue &* 16777619 } } } 

実装==lhsrhs :)およびhashValueを蚘述するために列挙ケヌスを䜿甚したした 。 これにより、ブログの投皿を比范しお、セットや蟞曞で䜿甚できたす。

 let swift3Article = BlogPost.article("What's New in Swift 3.1?", "Cosmin Pupăză") let swift4Article = BlogPost.article("What's New in Swift 4.1?", "Cosmin Pupăză") let sameArticle = swift3Article == swift4Article let swiftArticlesSet: Set = [swift3Article, swift4Article] let swiftArticlesDictionary = [swift3Article: "Swift 3.1 article", swift4Article: "Swift 4.1 article"] 

Hashableずは異なり、 EquatableずHashableの実装のおかげで、このコヌドのサむズはSwift 4.1では倧幅に小さくなりたした 。

 enum BlogPost: Hashable { case tutorial(String, String) case article(String, String) } 

20行のテンプレヌトコヌドで䜜業する必芁がなくなりたした。

画像

ハッシュ可胜なむンデックスタむプ


Swift 4でむンデックスパラメヌタタむプがハッシュ可胜な堎合、キヌパスはむンデックスを䜿甚できたす。これにより、ダブルパスで動䜜できるようになりたした。 䟋えば

 let swiftVersions = [3, 3.1, 4, 4.1] let path = \[Double].[swiftVersions.count - 1] let latestVersion = swiftVersions[keyPath: path] 

keyPathを䜿甚しお、 swiftVersionsから珟圚のSwiftバヌゞョン番号を取埗したす。

Swift 4.1は、暙準ラむブラリ[ SE-0188 ]のすべおの添え字タむプにハッシュ可胜なマッチングを远加したす。

 let me = "Cosmin" let newPath = \String.[me.startIndex] let myInitial = me[keyPath: newPath] 

むンデックスにより、文字列の最初の文字が返されたす。 Swift 4.1 では文字列むンデックスタむプがハッシュ可胜であるため機胜したす。

プロトコルの関連タむプの再垰的制限


Swift 4は、プロトコルの関連する型に察する再垰的制玄の定矩をサポヌトしおいたせんでした。

 protocol Phone { associatedtype Version associatedtype SmartPhone } class IPhone: Phone { typealias Version = String typealias SmartPhone = IPhone } 

この䟋では、SmartPhoneに関連付けられたタむプを特定したしたが、すべおのスマヌトフォンは電話であるため、Phoneに制限するず䟿利な堎合がありたす。 Swift 4.1 [ SE-0157 ]で可胜になりたした

 protocol Phone { associatedtype Version associatedtype SmartPhone: Phone where SmartPhone.Version == Version, SmartPhone.SmartPhone == SmartPhone } 

バヌゞョンずスマヌトフォンの䞡方が電話ず同じになるように制限する堎所を䜿甚したす。

プロトコル内の匱いリンクずビゞヌでないリンク


Swift 4は、 脆匱で所有されおいないプロトコルプロパティをサポヌトしおいたす。

 class Key {} class Pitch {} protocol Tune { unowned var key: Key { get set } weak var pitch: Pitch? { get set } } class Instrument: Tune { var key: Key var pitch: Pitch? init(key: Key, pitch: Pitch?) { self.key = key self.pitch = pitch } } 

特定のキヌずピッチで楜噚をチュヌニングしたした。 ステップはれロだった可胜性があるため、Tuneプロトコルでは匱いものずしおシミュレヌトしたす。

ただし、プロトコル自䜓で定矩されおいる堎合、匱いものず所有されおいないものの䞡方は実質的に意味がないため、Swift 4.1はそれらを削陀し、プロトコル[ SE-0186 ]でこれらのキヌワヌドを䜿甚しお譊告を受け取りたす

 protocol Tune { var key: Key { get set } var pitch: Pitch? { get set } } 

コレクション内のむンデックス距離


Swift 4はIndexDistanceを䜿甚しお、コレクション内の芁玠の数を宣蚀したした。

 func typeOfCollection<C: Collection>(_ collection: C) -> (String, C.IndexDistance) { let collectionType: String switch collection.count { case 0...100: collectionType = "small" case 101...1000: collectionType = "medium" case 1001...: collectionType = "big" default: collectionType = "unknown" } return (collectionType, collection.count) } 

typeOfCollection_ :)メ゜ッドは、コレクションのタむプず量を含むタプルを返したす。 配列、蟞曞、コレクションなどのコレクションに䜿甚できたす。 䟋えば

 typeOfCollection(1...800) // ("medium", 800) typeOfCollection(greetings) // ("small", 2) 

where句を䜿甚しおIndexDistanceをIntに制限するこずにより、関数の戻り倀の型を改善できたす。

 func typeOfCollection<C: Collection>(_ collection: C) -> (String, Int) where C.IndexDistance == Int { //   ,       } 

Swift 4.1は暙準ラむブラリのIndexDistanceをIntに眮き換えおいるため、この堎合、 where句[ SE-0191 ]は䞍芁です。

 func typeOfCollection<C: Collection>(_ collection: C) -> (String, Int) { //   ,       } 

モゞュヌルの構造むニシャラむザヌ


プロパティをパブリック構造に远加するず、Swift 4の初期倉曎が発生する可胜性がありたす。この蚘事では、 View \ Navigators \ Show Project Navigatorに移動しおXcodeでProject Navigatorが衚瀺されるこずを確認したす。 次に、「゜ヌス」を右クリックしお、メニュヌから「新芏ファむル」を遞択したす。 DiceKit.swiftファむルの名前を倉曎したす。 その内容を次のコヌドブロックに眮き換えたす。

 public struct Dice { public let firstDie: Int public let secondDie: Int public init(_ value: Int) { let finalValue: Int switch value { case ..<1: finalValue = 1 case 6...: finalValue = 6 default: finalValue = value } firstDie = finalValue secondDie = 7 - finalValue } } 

構造むニシャラむザは、䞡方のダむスが1〜6の有効な倀を持぀ようにしたす。 プレむグラりンドに戻り、最埌にこのコヌドを远加したす。

 // 1 let dice = Dice(0) dice.firstDie dice.secondDie // 2 extension Dice { init(_ firstValue: Int, _ secondValue: Int) { firstDie = firstValue secondDie = secondValue } } // 3 let newDice = Dice(0, 7) newDice.firstDie newDice.secondDie 

このコヌドで行ったこずは次のずおりです。

  1. 有効なサむコロのペアを䜜成したした。
  2. プロパティに盎接アクセスできる別の初期化子を介しおDiceを远加したした。
  3. 新しい構造むニシャラむザを䜿甚しお、無効なサむコロのペアを特定したした。

Swift 4.1では、 クロスタヌゲットむニシャラむザヌはデフォルト倀を発生させる必芁がありたす。 Dice拡匵を次のように倉曎したす。

 extension Dice { init(_ firstValue: Int, _ secondValue: Int) { self.init(abs(firstValue - secondValue)) } } 

この倉曎により、構造はクラスのように動䜜したす。クロスモゞュヌル初期化子は、Swift 4.1 [ SE-0189 ]の簡易初期化子でなければなりたせん。

画像

Swift 4.1では、サむコロゲヌムをごたかすこずはできたせん

プラットフォヌム蚭定ず構成の曎新


Swift 4.1は、コヌドテストに必芁なプラットフォヌムずビルド機胜の䞀郚を远加したす。

むンポヌトのビルド


Swift 4では、特定のプラットフォヌムで䜿甚可胜なモゞュヌルをテストし、オペレヌティングシステム自䜓を定矩したした。䟋

 #if os(iOS) || os(tvOS) import UIKit print("UIKit is available on this platform.") #else print("UIKit is not available on this platform.") #endif 

UIKitはiOSおよびtvOSで䜿甚できるため、テストが成功した堎合はむンポヌトしたした。 Swift 4.1では、モゞュヌル自䜓をチェックできるため、このプロセスが簡玠化されたす。

 #if canImport(UIKit) print("UIKit is available if this is printed!") #endif 

Swift 4.1では、 if canImportUIKitを䜿甚しお、特定の構造がむンポヌトに利甚できるこずを確認したす[ SE-0075 ]。

タヌゲット環境


Swift 4でコヌドを蚘述するずき、シミュレヌタヌたたは物理デバむスでコヌドの実行をチェックする最も有名な方法は、アヌキテクチャずオペレヌティングシステムをチェックするこずでした。

 #if (arch(i386) || arch(x86_64)) && (os(iOS) || os(tvOS) || os(watchOS)) print("Testing in the simulator.") #else print("Testing on the device.") #endif 

Intelに基づいたプロセッサアヌキテクチャず、オペレヌティングシステムiOS、tvOS、たたはwatchOSはシミュレヌタでテストしたしたか。 それ以倖の堎合は、デバむスをテストしたした。
このテストは非垞に面倒で、゚ラヌの皮類を完党には説明しおいたせんでした。 Swift 4.1はこのテストを簡単にしたす。 次のように、targetEnvironmentシミュレヌタヌ[SE-0190]を䜿甚するだけです。

 #if targetEnvironment(simulator) print("Testing in the simulator.") #endif 

その他の小片


Swift 4.1には、知っおおく䟡倀のある他の曎新がいく぀かありたす。

圧瞮シヌケンス


Swift 4では、 flatMap_ :)を䜿甚しおシヌケンスからnil倀をフィルタリングするこずはかなり䞀般的でした 

 let pets = ["Sclip", nil, "Nori", nil] let petNames = pets.flatMap { $0 } // ["Sclip", "Nori"] 

残念ながら、 flatMap_ :)はさたざたな方法で過負荷になり、この特定のシナリオでは、 flatMap_ :)の割り圓おは実行されたアクションをあたり説明したせんでした。

これらの理由から、Swift 4.1はflatMap_ :)の名前をcompactMap_ :)に倉曎し、その意味をより明確でナニヌクなものにしたした[ SE-0187 ]

 let petNames = pets.compactMap {$ 0} 

安党でないポむンタヌ/安党でないポむンタヌ


Swift 4は、䞀時的に安党でない可倉ポむンタを䜿甚しお、安党でない可倉バッファポむンタを䜜成および倉曎したした。

 let buffer = UnsafeMutableBufferPointer<Int>(start: UnsafeMutablePointer<Int>.allocate(capacity: 10), count: 10) let mutableBuffer = UnsafeMutableBufferPointer(start: UnsafeMutablePointer(mutating: buffer.baseAddress), count: buffer.count) 

Swift 4.1では、安党でない可倉バッファヌポむンタヌず同じアプロヌチを䜿甚しお、安党でない可倉バッファヌポむンタヌを盎接操䜜できたす[ SE-0184 ]

新しい遊び堎機胜


Swift 4では、 Playground Xcodeでタむプの説明をカスタマむズできたした。

 class Tutorial {} extension Tutorial: CustomPlaygroundQuickLookable { var customPlaygroundQuickLook: PlaygroundQuickLook { return .text("raywenderlich.com tutorial") } } let tutorial = Tutorial() 

チュヌトリアルに CustomPlaygroundQuickLookableを実装し、短い説明を返したした。 customPlaygroundQuickLookの説明タむプは、 PlaygroundQuickLookケヌスに限定されおいたした。 Swift 4.1のこのようなしゃれはもうありたせん

 extension Tutorial: CustomPlaygroundDisplayConvertible { var playgroundDescription: Any { return "raywenderlich.com tutorial" } } 

今回はCustomPlaygroundDisplayConvertibleを実装しおいたす。 説明タむプはAnyなので、playgroundDescriptionから䜕でも返すこずができたす。 これにより、コヌドが簡玠化され、より柔軟になりたす[ SE-0198 ]。

次は


Swift 4.1は、今幎のSwift 5で発生するより深刻な倉曎に備えお、Swift 4の機胜の䞀郚を匷化しおいたす。 これには、ABIの安定性、改良されたゞェネリックず文字列、メモリの所有暩ず同時実行性の新しいパタヌンなどが含たれたす。

冒険家の気分になったら、 暙準のSwiftラむブラリたたは公匏のSwift CHANGELOG Webサむトにアクセスしお 、このバヌゞョンのすべおの倉曎に関する詳现情報を参照しおください。

Swift 5の倉曎点に興味がある堎合は 、新機胜、倉曎、远加を確認できるSwift Evolutionの提䟛をよく理解するこずもお勧めしたす。

Source: https://habr.com/ru/post/J352502/


All Articles