Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
static lazy varの挙動を追ってみた
Search
noppefoxwolf
May 31, 2018
Technology
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
static lazy varの挙動を追ってみた
noppefoxwolf
May 31, 2018
More Decks by noppefoxwolf
See All by noppefoxwolf
High performance GIF playback/iOSDC25
noppefoxwolf
1
590
Spice up your notifications/try!Swift25
noppefoxwolf
3
830
iOSの隠されたAPIを解明し、開発効率を向上させる方法/iOSDC24
noppefoxwolf
2
1.3k
今から理解するApp Intentエコシステム/WWDC24Recap
noppefoxwolf
0
71
既存アプリをvisionOS対応してリリースした話/visionOS LT vol5
noppefoxwolf
0
230
UIのブラックボックスを探る/iOSDC23
noppefoxwolf
3
5.1k
CoreGraphicsでドット絵を描こう/iOSDC22
noppefoxwolf
0
3.2k
ランタイムデバッグのススメ/iOSDC21
noppefoxwolf
1
5.6k
google/mediapipe で始めるARアプリ開発/iOSDC2020
noppefoxwolf
1
1.7k
Other Decks in Technology
See All in Technology
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
260
新しいUbuntu/GNOMEが使いたいからXからWaylandへ移行頑張ってるの巻 2026-06-20
nobutomurata
0
160
水を運ぶ人としてのリーダーシップ
izumii19
4
880
Comment regagner la souveraineté de vos données tout en étant payé grâce à Nostr !
rlifchitz
0
160
5分でわかるDuckDB Quack
chanyou0311
2
220
SONiCのLinuxベースを活かしたZabbix監視
sonic
0
280
攻撃者視点で考えるDetection Engineering
cryptopeg
3
2.1k
千葉での単身赴任からAWSをやり続け、千葉に戻ってきた話
yama3133
1
110
iOS アプリの「これって不具合ですか?」を AI に調べてもらう
miichan
0
140
時期が悪い!それでもRaspberry Piを買って遊んで活用するには / 20260627-osc26do-rpi-jikigawarui
akkiesoft
0
700
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
4
750
AWS Security Agent といっしょに脅威モデリングをやってみよう
amarelo_n24
1
200
Featured
See All Featured
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
How GitHub (no longer) Works
holman
316
150k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Site-Speed That Sticks
csswizardry
13
1.2k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
240
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
66
55k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
The Invisible Side of Design
smashingmag
301
52k
The Pragmatic Product Professional
lauravandoore
37
7.3k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Transcript
TUBUJDMB[ZWBSƑ㌀ọƵሔƆƉ ƢƂ ့ழ္ ! !OPQQFGPYXPMG
MB[ZƑŭŸƬŧ lazy var value: Int = 0 WBMVFƒƸDžǑǏŸƯƮơƊളӮŸƯƍŧ ! !OPQQFGPYXPMG
USZ4XJGUƊƑǜDžǡǙDž lazy var value: Int = { preconditionFailure() }() Ԛ௹߄с⇜ƍǭȃǧǜƹƵMB[ZWBSƊ࿆żƮŶƋ
ƊaսೆభƎƸDžǑǏżƮƋઋƋżŶƋůƊŰƮb ơƂ/FWFSƊْżŶƋƊƵƲŽƎ࿆ƊŰƮb ! !OPQQFGPYXPMG
TUBUJDඔƑMB[ZWBS UVUPSJBMTXJGU class Class { static lazy var value: Int
= { preconditionFailure() }() } Class.value = 1 ! !OPQQFGPYXPMG
$ 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
UVUPSJBMTXJGU class Class { static var value: Int = {
preconditionFailure() }() } Class.value = 1 MB[ZƵຓźƉljȉǧƺȁƥӮۿĆ ! !OPQQFGPYXPMG
$./tutorial002 Fatal error: file tutorial002.swift, line 2 ༵ƎQSFDPOEJUJPO'BJMVSFůޫƓƯƉŧƮl ! !OPQQFGPYXPMG
Ệ㗈 YYYYYTXJGU class Class { static var xxxxx: Int =
{ preconditionFailure() }() } ඔƵƲŮƭƧżŲYYYYƎźƉ4*-Ƶԛ৯źƉƢƮ 4XJGU*OUFSNFEJBUF-BOHVBHF4XJGUƑᇏᾇ∽ ! !OPQQFGPYXPMG
! !OPQQFGPYXPMG
TXJGUDFNJUTJMHFOYYYYYTXJGUYYYYYTJM ! !OPQQFGPYXPMG
// 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
%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
սೆభƎQSFDPOEJUJPO'BJMVSFůޫƓƯƉŧƮƑƒ ⻎ ! !OPQQFGPYXPMG
IUUQTCVHTTXJGUPSHCSPXTF43 ! !OPQQFGPYXPMG
'lazy' must not be used on an already- lazy global
MB[Z䵐۬ₑǭȃǧǜƹƑMB[ZƋƒũၩ ! !OPQQFGPYXPMG