Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Swift愛好会初心者ハンズオン(vol.31)
Search
Satoru Ohguchi
May 20, 2018
Technology
280
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Swift愛好会初心者ハンズオン(vol.31)
Satoru Ohguchi
May 20, 2018
More Decks by Satoru Ohguchi
See All by Satoru Ohguchi
BG770A_photo_transfer_v2.pdf
ochicchi
0
130
Use the M5Stack with 3G Modem
ochicchi
0
2.3k
Play with M5Stack
ochicchi
1
2.2k
How to study AWS IoT
ochicchi
0
1.2k
How to use OMRON sensors and M5Stack
ochicchi
0
110
IotLT_52-HobbyOmronSensors.pdf
ochicchi
2
830
JAWS-UG Beginner 2018/06/22
ochicchi
0
630
Swift入門者向けハンズオンからの学び
ochicchi
1
470
Swift愛好会 #28
ochicchi
0
590
Other Decks in Technology
See All in Technology
Metadata - Section 3 : Dublin Core Standard · DC
mohab1
0
120
Ebitengine製iOSアプリ公開ボタンを押す会
eiei114
0
110
サボる子はいねぇがー!AgentCoreハーネスの脆弱性に学ぶ、エージェントの入力バリデーション
iwamot
PRO
5
320
Claude Codeで作ったアプリを安全に公開する/Built with Claude Japan 2026
yoshidashingo
0
220
AWS構成から考えるWebセキュリティ ― WordPressの構築経験から考える公開範囲と更新運用【JAWS FESTA 2026 in AKITA】
cscengineer
PRO
2
390
The future of architectural work
ufried
0
190
業務でAWSをあまり使っていない私が、AWSへのモチベを保つ方法
smt7174
0
180
HQ駆動開発で最高のAI-Contextを作ろう
sansantech
PRO
1
120
AWS Quick 入門 | 目指せ Quick マスター 01
inariku
PRO
2
260
お客様の「やりたい」の先を見通す合意形成プロセス ~裏にある課題と不安を解きほぐすコツ~
yukakoseki
0
130
アラートを見直していたら営業組織への理解にちょっとだけ繋がった話
z63d
0
110
生成AI時代のIAMのマニアックな話
takuros
6
2.8k
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
1k
For a Future-Friendly Web
brad_frost
184
11k
Mind Mapping
helmedeiros
1
430
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.7k
Designing Powerful Visuals for Engaging Learning
tmiket
1
650
Color Theory Basics | Prateek | Gurzu
gurzu
1
510
4 Signs Your Business is Dying
shpigford
187
23k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
370
Scaling GitHub
holman
464
140k
Unsuck your backbone
ammeep
672
58k
Transcript
4XJGUѪձ ॳ৺ऀϋϯζΦϯ SwiftѪձ #31
ΨΠμϯε • SwiftѪձͷ৽͍͠औΓΈͱͯ͠ɺॳ৺ऀϋϯ ζΦϯΛͬͯΈΑ͏ͱ͍͏͜ͱʹͳΓ·ͨ͠ɻ • ༗ࢤʹΑΔϋϯζΦϯͱͳΓ·͢ͷͰɺࢸΒͳ͍ ͳͲ͋Δ͔͠Ε·ͤΜɻ͝ڠྗɺ͝ཧղ͍ͨͩ ͖·͢Α͏͓ئ͍͍ͨ͠·͢ɻ
ࣗݾհ • ࢘ձਐߦͷհ • Reiko Goto(@burakon) • Satoru Ohguchi(@o_chicchi) •
ϝϯλʔਞͷհ • ҰݴͣͭࣗݾհԼ͍͞ɻ
͡Ίʹ • ຊͷਐΊํ • αϯϓϧϓϩάϥϜΛ͢Δ͜ͱΛΰʔϧͱ͠·͢ɻ • ࠷ॳʹ֓ཁͳͲΛઆ໌͠·͢ɻ • ͻͱ·ͱ·Γຖʹઆ໌ɺ࣮ࡍͬͯ͘ͷ܁Γฦ͠Ͱ͢ɻ •
ਵ࣌ɺ࣭͍ͯͩ͘͠͞ɻ • ૢ࡞ͷ͔Βͳ͍ͳͲɺϝϯλʔʹϔϧϓΛٻΊͯ Լ͍͞ɻ • άϧʔϓͰॿ͚߹͍ͳ͕ΒਐΊ͍͚ͯͨͩΔ͜ͱظ͠ ͍ͯ·͢ɻ •
ࣗݾհ • ໊͓લɺχοΫωʔϜͰΑ͍Ͱ͢ɻ • ֶੜ? ࣾձਓ? • ;ͩΜ͍ͬͯΔ͜ͱ(ࣄझຯͷ͜ͱͱ͔ɺઐ ߈ͷ͜ͱͱ͔) •
SwiftҎ֎ͷݴޠͷܦݧͱɺSwiftͷܦݧ
ࢀՃऀΞϯέʔτ(1) •ֶੜͰ͋Δ •ए͍ࣾձਓͰ͋Δ •͏ए͘ͳ͍ࣾձਓͰ͋Δ •·ͩ·ͩݩؾͳدΓͰ͋Δ
ࢀՃऀΞϯέʔτ(2) • ࢲɺ·ͬͨ͘ͷॳ৺ऀͰɺMacΛ৮Δͷɺϓ ϩάϥϜ͢ΔͷॳΊͯͩɻ(͓͓ΉͶ1ະຬ) • ଞͷݴޠͰͷϓϩάϥϛϯάܦݧ͋Δ(ઙͯ͘ Մ)ɺiOSͷϓϩάϥϜΛॻ͍ͯΈ͍͔ͨΒɺࠓ དྷͯΈͨɻ • ΞϓϦΛ࡞ͬͯΈͨͯ͘ɺॻ੶ͳͲͰֶश͍ͯ͠
Δ͕ɺͳ͔ͳ͔शಘʹࢸΒͣɺۤ࿑͍ͯ͠Δɻ
͞ͳ͍͜ͱ • Storyboard গ͚͔ͩ͠͠Γ·ͤΜɻ • ڽͬͨϨΠΞτɺਂ͍ϓϩάϥϛϯάʹ͍ͭ ͯѻ͍·ͤΜɻ • ઃܭख๏ͱ͍ͬͨ͜ͱʹ৮Ε·ͤΜɻςετप ลͷίʔυ৮Ε·ͤΜɻ
• ΞϓϦͷϦϦʔεʹ͚ͨొํ๏ɺసૹํ๏ʹ ͍ͭͯ৮Ε·ͤΜɻ
ϓϩάϥϛϯάֶशʹ͍ͭͯ
ϓϩάϥϜΛश͏ಈػ • Կ͔࡞ͬͯΈ͍ͨαʔϏεɺΞϓϦ͕͋ͬͯɺͦ ͷͨΊʹֶश͢Δɻ • ब৬ɺస৬׆ಈʹ༗ར͔ͩΒɺֶशͯ͠༗རʹਐ Ί͍ͨɻ • ͰɺαʔϏεΞϓϦΛͤ͞Δ͜ͱ͕ॏཁ ͰɺʮJavaΛश͍ͬͯ·͢ʯͱ͍͏ΑΓɺՌ͕
͋Δ΄͏͕Α͍ɻ
ϓϩάϥϛϯάݴޠʹ͍ͭͯ • Ͳͷݴޠ͔ΒೖͬͯɺͲΕͰ͍͍ͱࢥ͏ɻͰ ɺࠓɺSwiftɻSwift ਪͰ͖ΔɺΑ͘Ͱ͖ ͨݴޠͩͱࢥ͏ɻ • ಘҙͳݴޠΛɺ1ͭ࣋ͭ͜ͱ͕ॏཁɻಘҙͳݴޠΛ ෳʹͰ͖ͨΒɺͰ͖Δ͜ͱ͕͕Δɻ •
1ͭͷݴޠΛशಘͰ͖Εɺଞͷݴޠʹ͍͛ͯ͘ ͜ͱɺͦΜͳʹ͘͠ͳ͍ɻ
ϓϩάϥϛϯάֶशͷίπ • ίϐʔ&ϖʔετ͚ͩͰɺͳ͔ͳֶ͔श͍͠ɻ • ࣮ࡍʹɺλΠϓͯ͠ɺಈ͖Λ֬ೝ͠ͳ͕ΒΔͷ͕ Α͍ɻ • ͳͥɺ͜͏ಈ͘ͷ͔ɺϩδοΫ͕Ͳ͏ͳ͍ͬͯΔͷ ͔ɺཧղͯ͠ਐΊΔ͜ͱ͕ॏཁɻࢴʹॻ͍ͯΈͨΓɺ ཧͯ͠ΈͨΓɻ
• ޠֶͱҰॹͰগͣͭ͠ͰຖɺຊಡΜͩΓɺ৮Ε ͨΓ͢Δ͜ͱ͕ਐาʹܨ͕Δɻ
ݸਓతʹ… • ϓϩάϥϛϯάɺࠓޙɺখֶੜͷΧϦΩϡϥϜʹ ೖ͖͕͍ͬͯͯͬͯ͘͜ͱ͕༧͞ΕΔɻجຊ ࣝͷྖҬʹۙ͘ͳ͍ͬͯ͘ͱࢥ͏ɻ • ΞϓϦΛ࡞ͬͨΓɺશੈքʹϦϦʔεͰ͖ͨΓ͢Δ Έ໘ന͍ɻपล͍ࣝΖ͍ΖඞཁͰ͕͢ɺ νϟϨϯδ͢ΔՁ͋Δͱࢥ͍·͢ɻ •
ੲ͔Βɺίϯϐϡʔλʔ͕͖ͳਓͱͯ͠ɺίϯ ϐϡʔλʔϓϩάϥϛϯά͕ɺ͖ʹͳͬͯ͘Ε Δਓ͕ҰਓͰ૿͑ͨΒخ͍͠ɻ
ϋϯζΦϯͷਐΊํ
ϋϯζΦϯࢿྉ w $PNNQBTT্ͷϦϯΫ͔ΒɺHJUIVC্ͷखॱΛࢀরԼ ͍͞ɻ w εϥΠυ্ͰɺओͳखॱͷΈࣔ͠·͢ɻ w ਐΊΒΕΔํɺखॱΛݟͳ͕ΒઌਐΊͯԼ͍͞ɻ
Xcodeͷॳظઃఆ
XcodeΛىಈ͢Δ • ΞϓϦέʔγϣϯ → Xcode ͱબΜͰىಈ
ઃఆը໘Λબ w 9DPEFˠ1SFGFSFODFTͱબΜͰىಈ
Xcodeͷॳظઃఆ(1) • Accounts Λબ͢Δɻ
Xcodeͷॳظઃఆ(1) • ࠨԼʹ͋ΔʮʴʯΛબ͢Δɻ
Xcodeͷॳظઃఆ(1) • Apple ID Λબ͠ɺContinue Λબ͢Δɻ
Xcodeͷॳظઃఆ(1) • AppleIDͷΞΧϯτΛઃఆ͠ɺSign In Λબ͢Δɻ
Xcodeͷॳظઃఆ(2) •ߦදࣔΛग़͢ Text Editing ͷதͷ Line Number Λબ͢Δɻ
Xcodeͷॳظઃఆ(3) w %PVCMF$MJDL/BWJHBUJPOΛઃఆ͢Δɻ
Hello World Λग़ͯ͠ΈΔ
ϓϩδΣΫτΛ࡞͢Δ • File → New → Project
ΞϓϦͷλΠϓΛબ͢Δ • Single View App → Next Λબ
ϓϩδΣΫτͷඞཁࣄ߲Λઃఆ •ҎԼͷΑ͏ʹهೖͯ͠ɺNext Λબɻ
อઌΛબ • อॴΛઃఆͯ͠ɺʮCreateʯΛબ͢Δɻ
Storyboard Λબ •Xcode͕։͘ͷͰɺStoryboard Λબ
SafeAreaΛબ •Safe Area Λબ͢Δ
Hello World ͷϥϕϧΛஔ͢Δ • Xcode ͷӈԼʹ͋Δը໘ͷը໘Ͱɺʮshow the object libraryʯΛબ •
Filter ʹ Label ͱೖྗ • Label ͕දࣔ͞ΕΔ͜ͱΛ֬ೝ
Hello World ͷϥϕϧΛஔ͢Δ
Hello World ʹจࣈྻΛॻ͖͑Δ
੍Λઃఆ͢Δ
ԼهͷΑ͏ʹͳ͍ͬͯΔ͜ͱΛ֬ೝ
Ϗϧυ࣮ͯ͠ߦͯ͠ΈΔ • iPhoneX ͷγϛϡϨʔλʔΛબΜͰʮ⾣ʯΛબ͢Δɻ
ΫΠζΞϓϦ
ૉࡐͷμϯϩʔυ • ΫΠζͷͷcsvٴͼɺը૾Λ༻ҙͨ͠ͷͰɺμ ϯϩʔυ͓ئ͍͠·͢ɻ
શମͷྲྀΕͷઆ໌ • ࠓճͷΞϓϦͷશମతͳྲྀΕΛҎԼʹࣔ͠·͢ɻ ? ?
4UPSZ#PBSE
Xcode Ͱ৽͍͠ϓϩδΣΫτΛ։͘
ը໘ͷૉࡐΛొ͢Δ w "TTFUTYDBTTFUTΛબ͢Δɻ "TTFUTYDBTTFUT
ը໘ͷૉࡐΛొ͢Δ •ը໘ͷૉࡐΛஔ͢Δɻ
ViewControllerͷஔ • StoryBoard Λબͯ͠ɺදࣔ͠ɺViewController Λஔ͢Δɻ
֤ը໘༻ͷίʔυΛ४උ w 'JMFΛબ͠·͢ɻ
֤ը໘༻ͷίʔυΛ४උ w $PDPB5PVDIΛબ͢Δ
w ΫϥεΛࢦఆ͠·͢ɻ2VJ[7JFX$POUSPMMFSͱࢦఆ͢Δɻ ֤ը໘༻ͷίʔυΛ४උ
֤ը໘༻ͷίʔυΛ४උ w ʮ$SFBUFʯΛબ͠·͢ɻ
֤ը໘༻ͷίʔυΛ४උ w ಉ༷ʹɺ3FTVMU7JFX$POUSPMMFSΛ࡞͠·͢ɻ
$VTUPN$MBTTͷࢦఆ w ֤ετʔϦʔϘʔυʹࢦఆ͠·͢ɻ
$VTUPN$MBTTͷࢦఆ w ಉ༷ʹɺ3FTVMU7JFX$POUSPMMFSࢦఆ
෦ஔ
શମਤ
τοϓը໘ w *NBHF7JFXͱ#VUUPOΛஔ͠·͢ɻ
ΫΠζදࣔը໘ w ҎԼஔ͠·͢ɻ w ϥϕϧ͇ w Ϙλϯ͇ w UBHΛઃఆ w
*NBHF7JFXº
݁Ռදࣔը໘ w ҎԼΛஔ͠·͢ɻ w *NBHF7JFX w ϥϕϧ w Ϙλϯ
֤ը໘ͷඥ͚ w ελʔτϘλϯ͔Βɺ 2VJ[7JFX$POUSPMMFS Ή͔ͬͯɺTFHVF Λઃఆ͢Δɻ
ը໘ͱͷඥ͚ w 2VJ[7JFX$POUSPMMFS ͔Βɺ 3FTVMU7JFX$POUSPMMFS ʹ͔ͬͯɺTFHVF Λઃఆ͢Δɻ
ը໘ͱͷඥ͚ w *EFOUJpFSΛఆٛ͢Δ
2VJ[7JFX$POUSPMMFSͷιʔεͱͷඥ͚
2VJ[7JFX$POUSPMMFSͷιʔεͱͷඥ͚
3FTVMU7JFX$POUSPMMFSͷιʔεͱͷඥ͚
ϓϩάϥϛϯά
มΛఆٛ // Λ֨ೲ var csvArray:[String] = [] // औΓग़ͨ͠Λ֨ೲ var
questionArray:[String] = [] // ม var questionCount = 0 // ग़ var correctCount = 0 // ਖ਼ղ // ఆ let total = 3 // ग़ let waitQuestion = 0.8 // දࣔͷִؒ
ΛDTW͔Βྻʹ // CSVϑΝΠϧͷಡΈࠐΈ func loadCSV(filename : String)->[String] { // ฦ٫ͷॳظԽ
var csvStr:[String] = [] // CSVΛಡΈࠐΜͰArrayʹ if let csvPath = Bundle.main.path(forResource: filename, ofType: "csv") { do { var csvData = try String(contentsOfFile: csvPath, ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹencoding: String.Encoding.utf8) csvData = csvData.replacingOccurrences(of: "\n", with: "") csvStr = csvData.components(separatedBy: .newlines) } catch let error as NSError { print(error.localizedDescription) } } return csvStr }
දࣔ // දࣔ func nextProblem() { // questionArrayͷॳظԽ questionArray.removeAll(keepingCapacity: true)
if questionCount < total { // questionArrayʹ৽نΛ֨ೲ questionArray = csvArray[questionCount].components(separatedBy: ",") // දࣔ༰Ληοτ quizNumberLabel.text = "ୈ\(questionCount+1)" quizQuestion.text = questionArray[0] uiButton1.setTitle(questionArray[2], for: .normal) uiButton2.setTitle(questionArray[3], for: .normal) uiButton3.setTitle(questionArray[4], for: .normal) uiButton4.setTitle(questionArray[5], for: .normal) } else { // Λશͯදࣔͨ͠ޙͷॲཧ(ޙͰهड़) } } }
ճΛબͨ͠Βఆ // ਖ਼ޡఆ @IBAction func btnAction(_ sender: UIButton) { //
ਖ਼ղͱϘλϯͷλά൪߸͕ಉ͡ͳΒਖ਼ղ if sender.tag == Int(questionArray[1]) { answerImage.image = UIImage(named: "correct.png") correctCount += 1 } else { answerImage.image = UIImage(named: "incorrect.png") } // ճදࣔͷ༗ޮԽ(0.8ඵؒ) answerImage.isHidden = false DispatchQueue.main.asyncAfter(deadline: .now() + waitQuestion) { self.answerImage.isHidden = true } // ࣍ͷจݺͼग़͠ questionCount += 1 nextProblem() }
ը໘ભҠΛهड़ w 4FRVFΛͬͯΛ͢ͷͰ͢Λఆٛ w ը໘ભҠΛ͢Δ // Segue ͰΛ͢ override func
prepare(for segue: UIStoryboardSegue, sender: Any?) { let sVC: ResultViewController = (segue.destination as? ResultViewController)! sVC.correct = correctCount } // Storyboard Segue ͷ Identifier ΛҾʹఆٛͯ͠ը໘ભҠ DispatchQueue.main.asyncAfter(deadline: .now() + waitQuestion) { self.performSegue(withIdentifier: "toResultViewController", sender: nil) }
2VJ[ͷWJFX%JE-PBEΛهड़ // ը໘දࣔྃޙʹಈ͘ϝιου override func viewDidLoad() { super.viewDidLoad() // ͷಡΈࠐΈ
csvArray = loadCSV(filename: "loveswift") // ը໘ͷॳظԽ answerImage.isHidden = true // දࣔ nextProblem() }
ը໘ΛΔఆٛΛ͢Δ ViewControllerʹҎԼɺه͠·͢ɻ @IBAction func unWindSegue(_ sender: UIStoryboardSegue) { print("topwindow") }
4UPSZCPBSE্ͰΔఆٛΛ͢Δ w VO8JOE4FRVFͱ݁ͼ͚ͭΔ
Ϗϧυ • iPhoneX ͷγϛϡϨʔλʔΛબΜͰʮ⾣ʯΛબ ͢Δɻ
Τϥʔͷ֬ೝํ๏ w ը໘ͷԼ෦ʹҎԼͷ૭Λදࣔͤ͞Δ͜ͱͰɺΤϥʔΛ֬ೝ Ͱ͖·͢ɻ
Ͱ͖·͔ͨ͠
ֶशΛଓ͚͍ͯ͘ʹ
ֶशܧଓͷख๏ w ॻ੶ͰֶͿ w ωοτͰฉ͘ w ษڧձɺΧϯϑΝϨϯεʹࢀՃ͢Δ
J1IPOFΞϓϦ։ൃೖ w ࠓճͷϋϯζΦϯʹɺ͔ͳΓ ͍ۙ༰ͰͷΞϓϦ։ൃͷํ ๏Λઆ໌͍ͯ͠·͢ɻ w ࠓճͷϋϯζΦϯͷ෮शɺ ೖऀ͚ͷॻ੶ͱͯ͠ɺ ࠷దͩͱࢥ͍·͢ɻ w
͜ͷॻ੶Λҙࣝͯ͠ࠓճͷϋ ϯζΦϯΛͨ͠༁Ͱͳ͍Ͱ ͕͢ɺهड़Ϩϕϧɺ΄΅ಉ ͡Ͱ͢ɻ
J04ΞϓϦ։ൃूதߨ࠲ w ͍Ζ͍ΖͳΞϓϦͷ։ൃྫ͕ ܝࡌ͞Ε͍ͯ·͢ɻͰऴ ΘΒͳ͍ϘϦϡʔϜͰ͢ɻ w ҰͭҰͭखॱʹԊͬͯ࡞ͬͯ ͍͘͜ͱͰ࡞ՄೳͰ͢ɻ w ೖऀֶ͚शॻ੶ͷͱ
͓ͯ͠קΊͰ͢ɻ
ຊؾͰ͡ΊΔJ1IPOFΞϓϦ࡞Γ w ௨শɺࠇଳຊͱݺΕ͍ͯΔ ఆ൪ॻ੶Ͱ͢ɻ w جຊతͳςΫχοΫͱ͔Α͘ ॻ͔Ε͍ͯ·͢ɻ w ॳڃऀ͕தڃऀʹͳΔͨΊʹ ɺඞಡͷͱࢥ͍·͢ɻ
4XJGU࣮ફೖ w ࠓճɺϓϩάϥϜίʔυͷ આ໌ল͍͍ͯ·͕͢ɺ4XJGU ͷॻ͖ํΛֶश͍ͨ͠ͷͰ͋ Εɺ࣮ફೖ͕ྑ͍ͱࢥ͍ ·͢ɻ w தڃऀʹͳΔͨΊʹಡΉ ͖ॻ੶ͱࢥ͍·͢ɻ
w ݸਓతʹಡΈ͖ͯ͘͢ ͳॻ੶Ͱ͢ɻ
J041SPHSBNJOH w ॻళͷళ಄ʹฒΜͰ͍·ͤΜ ͕ɺQFBLT͔ΒΫϥυϑΝϯ σΟϯάͰൢച͞Εͨॻ੶Ͱ͢ɻ w J04%FWFMPQFSͰ༗໊ͳํ͕ த৺ͱͳͬͯॻ͔Ε͍ͯΔͷͰɺ ͱͯࢀߟʹͳΔͰ͢ɻ w
ͲͪΒ͔ͱ͍͏ͱɺதʙ্ڃऀ ͚ͱࢥ͍·͢ɻ w IUUQTQFBLTDDJ04
UFSBUBJM w ࠔͬͨΒɺUFSBUBJMͰฉ͍ͯΈΔɻ
5IBOLZPV