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

iOSDC 2026

Avatar for 417.72KI 417.72KI
September 13, 2026

iOSDC 2026

Avatar for 417.72KI

417.72KI

September 13, 2026

More Decks by 417.72KI

Other Decks in Programming

Transcript

  1. const a = '1'; const b = 2; const c

    = a + b; console.log(c); // 3? ❌ 🤔
  2. const a = '1'; const b = 2; const c

    = a + b; console.log(c); // '12' 🤮
  3. const a = 1; const b = 2; const c

    = a + b; console.log(c); // 3 😇
  4. import Foundation import SamplePackage @main struct Runner { static func

    main() { SamplePackage.run { print("Hello, world!") } let result = SamplePackage.greeting { "c" } print(result == "C: c") } } import Testing @testable import SamplePackage @Test func run() async throws { SamplePackage.run { print("Hello, world!") } } @Test func greeting() async throws { let result = SamplePackage.greeting { "c" } #expect(result == "C: c") } ※サンプルコードです。実際のコードとは関係ありません。
  5. import Foundation import SamplePackage @main struct Runner { static func

    main() { SamplePackage.run { print("Hello, world!") } let result = SamplePackage.greeting { "c" } print(result == "C: c") } } import Testing @testable import SamplePackage @Test func run() async throws { SamplePackage.run { print("Hello, world!") } } @Test func greeting() async throws { let result = SamplePackage.greeting { "c" } #expect(result == "C: c") } ※サンプルコードです。実際のコードとは関係ありません。
  6. // swift-tools-version: 6.3 import PackageDescription let package = Package( name:

    "iOSDC2026_SampleRunner", products: [], dependencies: [ .package(name: "iOSDC2026_Sample", path: "../"), ], targets: [ .executableTarget( name: "SampleRunner", dependencies: [ .product( name: "SamplePackage", package: "iOSDC2026_Sample" ), ], swiftSettings: [ .enableUpcomingFeature("ForwardTrailingClosures"), ], ), ], swiftLanguageModes: [.v5] ) // swift-tools-version: 6.3 import PackageDescription let package = Package( name: "iOSDC2026_Sample", products: [ .library( name: "SamplePackage", targets: ["SamplePackage"] ), ], targets: [ .target( name: "SamplePackage", ), .testTarget( name: "SamplePackageTests", dependencies: ["SamplePackage"] ), ], swiftLanguageModes: [.v5] )
  7. // swift-tools-version: 6.3 import PackageDescription let package = Package( name:

    "iOSDC2026_SampleRunner", products: [], dependencies: [ .package(name: "iOSDC2026_Sample", path: "../"), ], targets: [ .executableTarget( name: "SampleRunner", dependencies: [ .product( name: "SamplePackage", package: "iOSDC2026_Sample" ), ], swiftSettings: [ .enableUpcomingFeature("ForwardTrailingClosures"), ], ), ], swiftLanguageModes: [.v5] ) // swift-tools-version: 6.3 import PackageDescription let package = Package( name: "iOSDC2026_Sample", products: [ .library( name: "SamplePackage", targets: ["SamplePackage"] ), ], targets: [ .target( name: "SamplePackage", ), .testTarget( name: "SamplePackageTests", dependencies: ["SamplePackage"] ), ], swiftLanguageModes: [.v5] )
  8. 解説 ForwardTrailingClosures(SE-0286、Swift 5.8+) public func run( _ a: (() ->

    Void)? = nil, _ b: (() -> Void)? = nil, _ c: (() -> Void)? = nil, ) { if let a { print("\u{001B}[31mRunning A\u{001B}[0m") a() } if let b { print("\u{001B}[32mRunning B\u{001B}[0m") b() } if let c { print("\u{001B}[33mRunning C\u{001B}[0m") c() } } run { print("Hello, world!") } ForwardTrailingClosures = NO ForwardTrailingClosures = YES
  9. 対策(同じ挙動にしたい場合) 全モジュールに適用する-Package内の全targetに適用 let package = Package( name: "SamplePackage", products: [],

    dependencies: [~], targets: [ .target( name: "FeatureA", dependencies: [~], swiftSettings: [ .enableUpcomingFeature("ForwardTrailingClosures"), ], ), .target( name: "FeatureB", dependencies: [~], swiftSettings: [ .enableUpcomingFeature("ForwardTrailingClosures"), ], ), .target( name: "FeatureC", dependencies: [~], swiftSettings: [ .enableUpcomingFeature("ForwardTrailingClosures"), ], ), … ], )
  10. 対策(同じ挙動にしたい場合) 全モジュールに適用する-Package内の全targetに適用 let package = Package( name: "SamplePackage", products: [],

    dependencies: [~], targets: [ .target( name: "FeatureA", dependencies: [~], ), .target( name: "FeatureB", dependencies: [~], ), .target( name: "FeatureC", dependencies: [~], ), … ], ) package.targets.forEach { $0.swiftSettings = [ .enableUpcomingFeature("ForwardTrailingClosures"), ] }
  11. Self Introduction • 417.72KI • Twitter: @417̲72ki • GitHub: 417-72KI

    • Icon by: @fredii • Working at: (REDACTED)
  12. コンパイル時に評価される過程 SILで差分確認 $ swiftc -emit-silgen -swift-version 5 sample.swift > sample-5.sil

    $ swiftc -emit-silgen -swift-version 6 sample.swift > sample-6.sil import Foundation public func run( _ a: (() -> Void)? = nil, _ b: (() -> Void)? = nil, _ c: (() -> Void)? = nil, ) {} run { print("Hello world!") }