Slide 1

Slide 1 text

TUBUJDMB[ZWBSƑ㌀ọƵሔƆƉ ƢƂ ௜့ழ္ ! !OPQQFGPYXPMG

Slide 2

Slide 2 text

MB[ZƑŭŸƬŧ lazy var value: Int = 0 WBMVFƒƸDžǑǏŸƯƮơƊളӮŸƯƍŧ ! !OPQQFGPYXPMG

Slide 3

Slide 3 text

USZ4XJGUƊƑǜDžǡǙDž lazy var value: Int = { preconditionFailure() }() Ԛ௹߄с⇜ƍǭȃǧǜƹƵMB[ZWBSƊ࿆࿽żƮŶƋ ƊaսೆభƎƸDžǑǏżƮƋઋƋżŶƋůƊŰƮb ơƂ/FWFSƊْżŶƋƊƵ൐ƲŽƎ࿆࿽ƊŰƮb ! !OPQQFGPYXPMG

Slide 4

Slide 4 text

TUBUJD⴬ඔƑMB[ZWBS UVUPSJBMTXJGU class Class { static lazy var value: Int = { preconditionFailure() }() } Class.value = 1 ! !OPQQFGPYXPMG

Slide 5

Slide 5 text

$ swiftc tutorial001.swift tutorial001.swift:2:10: error: 'lazy' must not be used on an already-lazy global static lazy var value: Int = { preconditionFailure() }() ^~~~~ MB[ZNVTUOPUCFVTFEPOBOBMSFBEZMB[Z HMPCBM wHMPCBM⴬ඔƒ࠻ƎMB[ZƃŮƬaMB[ZŧƬƍŧƫ ! x ! !OPQQFGPYXPMG

Slide 6

Slide 6 text

UVUPSJBMTXJGU class Class { static var value: Int = { preconditionFailure() }() } Class.value = 1 MB[ZƵຓźƉljȉǧƺȁƥӮۿĆ ! !OPQQFGPYXPMG

Slide 7

Slide 7 text

$./tutorial002 Fatal error: file tutorial002.swift, line 2 ༵ƎQSFDPOEJUJPO'BJMVSFůޫƓƯƉŧƮl ! !OPQQFGPYXPMG

Slide 8

Slide 8 text

Ệ㗈 YYYYYTXJGU class Class { static var xxxxx: Int = { preconditionFailure() }() } ⴬ඔƵƲŮƭƧżŲYYYYƎźƉ4*-Ƶԛ৯źƉƢƮ 4XJGU*OUFSNFEJBUF-BOHVBHF4XJGUƑᇏᾇ࿽∽ ! !OPQQFGPYXPMG

Slide 9

Slide 9 text

! !OPQQFGPYXPMG

Slide 10

Slide 10 text

TXJGUDFNJUTJMHFOYYYYYTXJGUYYYYYTJM ! !OPQQFGPYXPMG

Slide 11

Slide 11 text

// static Class.xxxxx.setter sil hidden [transparent] @_T05xxxxx5ClassCAASivsZ : $@convention(method) (Int, @thick Class.Type) -> () { // %0 // users: %8, %2 // %1 // user: %3 bb0(%0 : $Int, %1 : $@thick Class.Type): debug_value %0 : $Int, let, name "value", argno 1 // id: %2 debug_value %1 : $@thick Class.Type, let, name "self", argno 2 // id: %3 // function_ref Class.xxxxx.unsafeMutableAddressor %4 = function_ref @_T05xxxxx5ClassCAASivau : $@convention(thin) () -> Builtin.RawPointer // user: %5 %5 = apply %4() : $@convention(thin) () -> Builtin.RawPointer // user: %6 %6 = pointer_to_address %5 : $Builtin.RawPointer to [strict] $*Int // user: %7 %7 = begin_access [modify] [dynamic] %6 : $*Int // users: %9, %8 assign %0 to %7 : $*Int // id: %8 end_access %7 : $*Int // id: %9 %10 = tuple () // user: %11 return %10 : $() // id: %11 } // end sil function '_T05xxxxx5ClassCAASivsZ' %4 ~ %5 ॳظԽ %6 ~ %7 ୅ೖ ! !OPQQFGPYXPMG

Slide 12

Slide 12 text

%4 = function_ref @_T05xxxxx5ClassCAASivau : $@convention(thin) () -> Builtin.RawPointer // user: %5 %5 = apply %4() : $@convention(thin) () -> Builtin.RawPointer // user: %6 GVODUJPO@SFGTJMGVODUJPOOBNFTJMUZQF4*-倔ඔ ƛƑҕᅶƵቔӮ @5YYYYY$MBTT$""4JWBVč䴙ƆƉŧŲƋ QSFDPOEJUJPO'BJMVSFĎƑҕᅶቔӮ BQQMZƊ⻎ྛ ! !OPQQFGPYXPMG

Slide 13

Slide 13 text

սೆభƎQSFDPOEJUJPO'BJMVSFůޫƓƯƉŧƮƑƒ⃷ ⻎ ! !OPQQFGPYXPMG

Slide 14

Slide 14 text

IUUQTCVHTTXJGUPSHCSPXTF43 ! !OPQQFGPYXPMG

Slide 15

Slide 15 text

'lazy' must not be used on an already- lazy global MB[Z䵐࿼۬ₑǭȃǧǜƹƑMB[ZƋƒ↎ũၩ໅ ! !OPQQFGPYXPMG