Slide 1

Slide 1 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. 1 Swift Sequence ͷศར API ࠶ൃݟ potatotips #95 treastrain / Tanaka Ryoga #potatotips

Slide 2

Slide 2 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. 2 treastrain / Tanaka Ryoga @treastrainɹhttps://tret.jp Swift 🦅 / Core NFC 📶 - Japan NFC Reader 💳 - PadDisplay 📺 DeNA Co., Ltd. - iOS App Developer ( April 2021 - Current)

Slide 3

Slide 3 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. Sequence 3

Slide 4

Slide 4 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. Sequence 4 Array Dictionary Range / ClosedRange Set String …etc. ద߹͍ͯ͠Δܕ InlineArray

Slide 5

Slide 5 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. for-in จ 5 for time in 1...95 { print("potatotips #\(time)") } // potatotips #1 // potatotips #2 // ... // potatotips #94 // potatotips #95

Slide 6

Slide 6 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. Swift ͷ഑ྻ͸஋ܕ 6 struct Object { var isReady: Bool var value: Int } let array: [Object] = ... let result = array .filter { $0.isReady } .map { $0.value } .prefix(3) for element in result { // ... }

Slide 7

Slide 7 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. Swift ͷ഑ྻ͸஋ܕ 7 let result = array .filter { $0.isReady } .map { $0.value } .prefix(3) for element in result { // ... } ཁૉ਺ɹɹ 10,000 ཁૉ਺࠷େ 10,000 ཁૉ਺࠷େ 10,000 ϧʔϓճ਺ 3

Slide 8

Slide 8 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. let result = array .filter { $0.isReady } .map { $0.value } .prefix(3) for element in result { // ... } Swift ͷ഑ྻ͸஋ܕ 8 var result: [Int] = [] for item in array { if item.isReady { result.append(item.value) } if result.count == 3 { break } } for element in result { // ... } ໋ྩతʹॻ͘৔߹

Slide 9

Slide 9 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. LazySequence 9 ཁૉʹର͢Δૢ࡞Λ஗Ԇͤ͞Δ let result = array .lazy .filter { $0.isReady } .map { $0.value } .prefix(3) for element in result { // ... } ཁૉ਺ɹɹ 10,000 ཁૉ਺࠷େ 10,000 ཁૉ਺࠷େ 10,000 ϧʔϓճ਺ 3 var result: [Int] = [] for item in array { if item.isReady { result.append(item.value) } if result.count == 3 { break } } for element in result { // ... }

Slide 10

Slide 10 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. stride(from:to:by:) 10 ຤ඌΛؚ·ͳ͍ let hours = [0, 3, 6, 9, 12, 15, 18, 21] // 0, 3, 6, 9, 12, 15, 18, 21 let hours = stride(from: 0, to: 24, by: 3)

Slide 11

Slide 11 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. stride(from:through:by:) 11 ຤ඌΛؚΉ let hours = [0, 3, 6, 9, 12, 15, 18, 21] // 0, 3, 6, 9, 12, 15, 18, 21 let hours = stride(from: 0, to: 24, by: 3) // 0, 3, 6, 9, 12, 15, 18, 21, 24 let hours = stride(from: 0, through: 24, by: 3)

Slide 12

Slide 12 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. sequence(first:next:) 12 લͷ஋Λ࢖͍ͳ͕ΒཁૉΛ࡞Δ let powersOfTwo = [1, 2, 4, 8, 16, 32, 64, 128] // 1, 2, 4, 8, 16, 32, 64, 128 let powersOfTwo = sequence(first: 1, next: { $0 * 2 }).prefix(8)

Slide 13

Slide 13 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. sequence(state:next:) 13 ঢ়ଶΛอ࣋͠ͳ͕ΒཁૉΛ࡞Δ // 0, 1, 1, 2, 3, 5, 8, 13, 21 let fibonacci = sequence(state: (0, 1)) { state in let current = state.0 state = (state.1, state.0 + state.1) return current } .prefix(9)

Slide 14

Slide 14 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. repeatElement(_:count:) 14 ಉ͡ཁૉ͕࿈ଓ͢Δ Sequence Λ࡞Δ let zeros = Array(repeating: 0, count: 10000) let zeros = repeatElement(0, count: 10000)

Slide 15

Slide 15 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. 15

Slide 16

Slide 16 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. 16

Slide 17

Slide 17 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. partitioned(by:) 17 ৚݅ʹΑͬͯ2ͭͷ഑ྻʹ෼͚Δ import Algorithms let numbers = [1, 2, 3, 4, 5] let (evens, odds) = numbers.partitioned(by: { $0.isMultiple(of: 2) }) print(evens) // [1, 3, 5] print(odds) // [2, 4]

Slide 18

Slide 18 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. chunks(ofCount:) 18 ࢦఆͨ͠਺͝ͱͷ·ͱ·Γʹ͢Δ import Algorithms let characters = ["ϒϥ΢ϯ", "ίχʔ", "αϦʔ", "͚Μ͘͞", "͑Μ͡Μ"] for chunk in characters.chunks(ofCount: 3) { print(chunk) // ["ϒϥ΢ϯ", "ίχʔ", "αϦʔ"] // ["͚Μ͘͞", "͑Μ͡Μ"] }

Slide 19

Slide 19 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. adjacentPairs() 19 ྡΓ߹͏ཁૉͷϖΞΛऔಘ͢Δ import Algorithms let places = ["DeNA", "GMOϖύϘ", "YOUTRUST", "LINEϠϑʔ"] for pair in places.adjacentPairs() { print(pair.0, "→", pair.1) // DeNA → GMOϖύϘ // GMOϖύϘ → YOUTRUST // YOUTRUST → LINEϠϑʔ }

Slide 20

Slide 20 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. firstNonNil(_:) 20 ࠷ॳʹ nil Ͱ͸ͳ͍ཁૉΛऔಘ͢Δ import Algorithms; import SwiftUI struct Profile { var displayName, username, email: String? var candidates: [String?] { [displayName, username, email] } } struct ContentView: View { var profile: Profile var body: some View { Text(profile.candidates.firstNonNil(\.self) ?? "໊ແ͠") } }

Slide 21

Slide 21 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. CollectionOfOne EmptyCollection ීஈͷ iOS ΞϓϦ։ൃͰ͸࢖Θͳͯ͘ྑ͍ 21 // 1ͭͷཁૉ͚ͩΛ࣋ͭίϨΫγϣϯ let collectionOfOne = CollectionOfOne("treastrain") // ීஈͷ iOS ΞϓϦ։ൃͰ͋Ε͹഑ྻͰΑ͍ let singleArray = ["treastrain"] // ཁૉ͕·ͬͨ͘ͳ͍ίϨΫγϣϯ let emptyCollection = EmptyCollection() // ීஈͷ iOS ΞϓϦ։ൃͰ͋Ε͹഑ྻͰΑ͍ let emptyArray: [Int] = []

Slide 22

Slide 22 text

Copyright © 2026 treastrain / Tanaka RyogaɹAll rights reserved. 22