fc2ブログ

iOSデバイスのハード仕様

2021. 07. 27
iPhoneのハード仕様

finish_iphone12__byii7ivyi3si_medium.jpg hero_iphone_12_pro_max__bjhv35s6o5bm_medium.jpg

DeviceiPhone
Model12 mini1212 Pro12 Pro Max
Capacity64GB
128GB
256GB
128GB
256GB
512GB
Height [mm]131.5146.7160.8
Width [mm]64.271.578.1
Depth [mm]7.4
Weight [g]133162187226
Display (ppi)5.4" 2340 x 1080
(476)
6.1" 2532 x 1170
(460)
6.7" 2778 x 1284
(458)
3D Touch-
Haptic Touch
CPUA14 Bionic 2.99GHz
CPU ArchitectureARMv8-A
GPUApple designed 4core GPU
Motion CoprocessorM14
RAM4GB6GB
iSight CameraDual 12MPPro 12MP
Video Recording4K(24,30,60fps)
FaceTime Camera-
TrueDepth Camera12MP
Touch ID-
Face ID
Apple Pay
GPS
Digital compass
Wi-Fi (802.11)Wi-Fi6
Bluetooth5.0
iBeacon
NFC
FeliCa
Siri
Barometer
Three-axis gyro
Accelerometer
LiDAR scanner-
Initial OS14.1
Latest OS14.7.1
Released2020.11.132020.10.232020.11.13


DeviceiPhone
Model88 PlusXXRXSXS Max1111 Pro11 Pro
Max
SE
(2nd Gen)
Capacity64GB
256GB
64GB
128GB
256GB
64GB
256GB
512GB
64GB
128GB
256GB
64GB
256GB
512GB
64GB
128GB
256GB
Height [mm]138.4158.4143.6150.9143.6157.5150.9144.0158.0138.4
Width [mm]67.378.170.975.770.977.475.771.477.867.3
Depth [mm]7.37.57.78.37.78.38.17.3
Weight [g]148202174194177208194188226148
Display
(ppi)
4.7"
1334
x 750
(326)
5.5"
1920
x 1080
(401)
5.8"
2436
x 1125
(458)
6.1"
1792
x 828
(326)
5.8"
2436
x 1125
(458)
6.5"
2688
x 1242
(458)
6.1"
1792
x 828
(326)
5.8"
2436
x 1125
(458)
6.5"
2688
x 1242
(458)
4.7"
1334
x 750
(326)
3D Touch--
Haptic
Touch
--
CPUA11 Bionic
2.40GHz
A12 Bionic
2.49GHz
A13 Bionic
2.66GHz
CPU
Architecture
ARMv8-AARMv8.3-A
GPUApple designed
3core GPU
Apple designed
4core GPU
Motion
Coprocessor
M11M12M13
RAM2GB3GB3GB4GB3GB
iSight
Camera
12MPDual 12MP12MPDual 12MPTriple 12MP12MP
Video
Recording
4K(24,30,60fps)
FaceTime
Camera
7MP-7MP
TrueDepth
Camera
-7MP12MP-
Touch ID-
Face ID--
Apple Pay
GPS
Digital
compass
Wi-Fi
(802.11)
a/b/g/n/acWi-Fi6
Bluetooth5.0
iBeacon
NFC
FeliCa
Siri
Barometer
Three-axis
gyro
Accelero
-meter
Initial OS11.012.013.013.4.1
Latest OS14.7.1
Released2017.9.222017.11.32018.10.262018.9.212019.9.202020.4.24


DeviceiPhone
Model5s66 Plus6s6s PlusSE77 Plus
Capacity16GB
32GB
64GB
16GB
32GB
64GB
128GB
16GB
64GB
128GB
16GB
32GB
64GB
128GB
32GB
128GB
256GB
Height [mm]123.8138.1158.1138.3158.2123.8138.3158.2
Width [mm]58.667.077.867.177.958.667.177.9
Depth [mm]7.66.97.17.17.37.67.17.3
Weight [g]112129172143192113138188
Display (ppi)4"
1136
x 640
(326)
4.7"
1334
x 750
(326)
5.5"
1920
x 1080
(401)
4.7"
1334
x 750
(326)
5.5"
1920
x 1080
(401)
4"
1136
x 640
(326)
4.7"
1334
x 750
(326)
5.5"
1920
x 1080
(401)
3D Touch--
CPUA7 1.3GHzA8 1.4GHzA9 1.85GHzA10 Fusion 2.33GHz
CPU ArchitectureARMv8ARMv8-A
GPUPowerVR
G6430
PowerVR
GX6450
PowerVR
GT7600
PowerVR
GT7600 Plus
Motion
Coprocessor
M7M8M9M10
RAM1GB2GB3GB
iSight Camera8MP12MP
Video Recording1080p(30fps)1080p(30,60fps)4K(30fps)
FaceTime
Camera
1.2MP5MP1.2MP7MP
Touch ID
Face ID-
Apple Pay-
GPS
Digital compass
Wi-Fi (802.11)a/b/g/na/b/g/n/ac
Bluetooth4.04.2
iBeacon
NFC-
FeliCa-
Siri
Barometer--
Three-axis gyro
Accelerometer
Initial OS7.08.09.09.310.0
Latest OS12.5.314.7.1
Released2013.9.202014.9.192015.9.252016.3.312016.9.16


DeviceiPhone
Model3G3GS44S55c
Capacity4GB
8GB
16GB
8GB
16GB
8GB
16GB
32GB
8GB
16GB
32GB
64GB
16GB
32GB
64GB
8GB
16GB
32GB
Height [mm]115115.5115.2123.8124.4
Width [mm]6162.158.659.2
Depth [mm]11.612.39.37.68.97
Weight [g]135133135137140112132
Display3.5" 480 x 320
163ppi
3.5" 960 x 640
326ppi
4" 1136 x 640
326ppi
3D Touch-
CPU1176JZ(F)-S
620MHz
(412MHz)
Cortex-A8
833MHz
(600MHz)
A4
1GHz
(800MHz)
A5
1GHz
(800MHz)
A6
1.3GHz
CPU
Architecture
ARMv6ARMv7ARMv7s
GPUPowerVR
MBX Lite
PowerVR
SGX535
PowerVR
SGX543MP2
PowerVR
SGX543MP3
Motion
Coprocessor
-
RAM128MB256MB512MB1GB
iSight
Camera
2MP3MP5MP8MP
Video
Recording
-VGA(30fps)720p(30fps)1080p(30fps)
FaceTime
Camera
-0.3MP1.2MP
Touch ID-
Face ID-
Apple Pay-
GPS-
Digital
compass
-
Wi-Fi (802.11)b/gb/g/na/b/g/n
Bluetooth2.0+EDR2.1+EDR4.0
iBeacon-
NFC-
FeliCa-
Siri-
Barometer-
Three-axis
gyro
-
Accelerometer
Initial OS1.02.03.04.05.06.07.0
Latest OS3.1.34.2.16.1.67.1.29.3.610.3.410.3.3
Released2007
.6.29
2008
.7.11
2009
.6.19
2010
.6.24
2011
.10.14
2012
.9.21
2013
.9.20



iPod touchのハード仕様

hero__wir9jx5uqaaa_medium.jpg  

DeviceiPod touch
Model1st Gen2nd Gen3rd Gen4th Gen5th Gen5th Gen
Mid 2013
6th Gen7th Gen
Capacity8GB
16GB
32GB
32GB
64GB
8GB
16GB
32GB
64GB
16GB
32GB
64GB
16GB16GB
32GB
64GB
128GB
32GB
128GB
256GB
Height [mm]110111.0123.4
Width [mm]61.858.958.6
Depth [mm]88.57.26.1
Weight [g]120115101888688
Display3.5" 480 x 320 163ppi3.5"
960
x 640
326ppi
4" 1136 x 640 326ppi
3D Touch-
CPU1176JZ(F)-S
620MHz
(412MHz)
ARM 11
620MHz
(533MHz)
Cortex-A8
833MHz
(600MHz)
A4
800MHz
A5
1GHz
(800MHz)
A8
1.4GHz
(1.1GHz)
A10 Fusion
2.33GHz
CPU
Architecture
ARMv6ARMv7ARMv8-A
GPUPowerVR
MBX Lite
PowerVR
SGX535
PowerVR
SGX543MP2
PowerVR
GX6450
PowerVR
GT7600 Plus
Motion
Coprocessor
-M8M10
RAM128MB256MB512MB1GB2GB
iSight
Camera
-0.7MP5MP-8MP
Video
Recording
-720p
(30fps)
1080p
(30fps)
720p
(30fps)
1080p
(30fps)
FaceTime
Camera
-0.3MP1.2MP
Touch ID-
Face ID-
Apple Pay-
GPS-
Digital
compass
-
Wi-Fi
(802.11)
b/gb/g/na/b/g/na/b/g/n/ac
Bluetooth-2.1+EDR4.04.1
iBeacon-
NFC-
FeliCa-
Siri-
Barometer-
Three-axis
gyro
-
Accelero
-meter
Initial OS1.12.1.13.1.14.16.06.1.38.412.3.1
Latest OS3.1.34.2.15.1.16.1.69.3.512.5.314.7.1
Released2007
.9.5
2008
.9.9
2009
.9.9
2010
.9.1
2012
.10.11
2013
.5.30
2015
.7.15
2019
.5.28



iPadのハード仕様

sp807-ipad-7th-gen.png  

DeviceiPad
Generation5th Gen6th Gen7th Gen8th Gen
ModelWi-FiWi-Fi +
Cellular
Wi-FiWi-Fi +
Cellular
Wi-FiWi-Fi +
Cellular
Wi-FiWi-Fi +
Cellular
Capacity32GB
128GB
Height [mm]240250.6
Width [mm]169.5174.1
Depth [mm]7.5
Weight [g]469478469478483493490495
Display9.7" 2048 x 1536 264ppi10.2" 2160 x 1620 264ppi
3D Touch-
CPUA9 1.85GHzA10 Fusion 2.33GHzA12 Bionic 2.49GHz
CPU ArchitectureARMv8-A
GPUPowerVR GT7600PowerVR GT7600 PlusApple designed 4core GPU
Motion CoprocessorM9M10M12
RAM2GB3GB
iSight Camera8MP
Video Recording1080p(30fps)
FaceTime Camera1.2MP
Touch ID
Face ID-
Apple Pay
GPS----
Digital compass
Wi-Fi (802.11)a/b/g/n/ac
Bluetooth4.2
iBeacon
NFC-
FeliCa-
Siri
Barometer
Three-axis gyro
Accelerometer
Apple Pencil-1st Gen
Keyboard-Smart Keyboard
Initial OS10.2.111.313.014.0
Latest OS14.7.1
Released2017.3.242018.3.272019.9.302020.9.18


DeviceiPadiPad 2iPadiPad
Generation1st Gen2nd Gen3rd Gen4th Gen
ModelWi-FiWi-Fi
+ 3G
Wi-FiWi-Fi
+ 3G
Wi-FiWi-Fi
+ 4G
Wi-FiWi-Fi
+ Cellular
Capacity16GB
32GB
64GB
16GB
32GB
64GB
128GB
Height [mm]242.8241.2
Width [mm]189.7185.7
Depth [mm]13.48.89.4
Weight [g]680730601613652662652662
Display9.7" 1024 x 768 132ppi9.7" 2048 x 1536 264ppi
3D Touch-
CPUA4 1GHzA5 1GHzA5X 1GHzA6X 1.4GHz
CPU ArchitectureARMv7ARMv7s
GPUPowerVR
SGX535
PowerVR
SGX543MP2
PowerVR
SGX543MP4
PowerVR
SGX554MP4
Motion Coprocessor-
RAM256MB512MB1GB
iSight Camera-0.9MP5MP
Video Recording-720p(30fps)1080p(30fps)
FaceTime Camera-0.3MP1.2MP
Touch ID-
Face ID-
Apple Pay-
GPS----
Digital compass
Wi-Fi (802.11)a/b/g/n
Bluetooth2.1+EDR4.0
iBeacon-
NFC-
FeliCa-
Siri-
Barometer-
Three-axis gyro-
Accelerometer
Apple Pencil-
Initial OS3.24.2.15.16.06.0.1
Latest OS5.1.19.3.59.3.69.3.59.3.610.3.310.3.4
Released2010.4.32010.4.302011.3.112012.3.162012.11.22012.11.16



iPad Airのハード仕様

ipad-air-3gen.jpg

DeviceiPad AiriPad Air 2iPad AiriPad Air
Generation1st Gen2nd Gen3rd Gen4th Gen
ModelWi-FiWi-Fi +
Cellular
Wi-FiWi-Fi +
Cellular
Wi-FiWi-Fi +
Cellular
Wi-FiWi-Fi +
Cellular
Capacity16GB
32GB
64GB
128GB
64GB
256GB
Height [mm]240250.6247.6
Width [mm]169.5174.1178.5
Depth [mm]7.56.1
Weight [g]469478437444456464458460
Display9.7" 2048 x 1536
264ppi
10.5" 2224 x 1668
264ppi
10.9" 2360 x 1640
264ppi
3D Touch-
CPUA7 1.4GHzA8X 1.5GHzA12 Bionic 2.49GHzA14 Bionic 2.99GHz
CPU ArchitectureARMv8ARMv8-A
GPUPowerVR
G6430
PowerVR
GXA6850
Apple designed 4core GPU
Motion CoprocessorM7M8M12M14
RAM1GB2GB3GB4GB
iSight Camera5MP8MP12MP
Video Recording1080p(30fps)4K(24,30,60fps)
FaceTime Camera1.2MP7MP
Touch ID-
Face ID-
Apple Pay-
GPS----
Digital compass
Wi-Fi (802.11)a/b/g/na/b/g/n/acWi-Fi6
Bluetooth4.04.25.0
iBeacon
NFC-
FeliCa-
Siri
Barometer-
Three-axis gyro
Accelerometer
Apple Pencil-1st Gen2nd Gen
Keyboard-Smart KeyboardSmart Keyboard Folio
Magic Keyboard
Initial OS7.0.37.18.112.1.414.1
Latest OS12.5.314.7.1
Released2013.11.12014.10.242019.3.182020.10.23



iPad miniのハード仕様

ipad-mini-5gen.jpg

DeviceiPad miniiPad mini 2iPad mini 3iPad mini 4iPad mini
Generation1st Gen2nd Gen3rd Gen4th Gen5th Gen
Model ※1
Capacity16GB
32GB
64GB
16GB
32GB
64GB
128GB
16GB
64GB
128GB
16GB
32GB
64GB
128GB
64GB
256GB
Height [mm]200203.2
Width [mm]134.7134.8
Depth [mm]7.27.56.1
Weight [g]308312331341331341298.8304300.5308.2
Display7.9" 1024 x 768
163ppi
7.9" 2048 x 1536
326ppi
3D Touch-
CPUA5
1GHz
A7
1.3GHz
A8
1.5GHz
A12 Bionic
2.49GHz
CPU
Architecture
ARMv7ARMv8ARMv8-A
GPUPowerVR
SGX543MP2
PowerVR
G6430
PowerVR
GX6450
Apple
designed
4core GPU
Motion
Coprocessor
-M7M8M12
RAM512MB1GB2GB3GB
iSight
Camera
5MP8MP
Video
Recording
1080p(30fps)
FaceTime
Camera
1.2MP7MP
Touch ID-
Face ID-
Apple Pay-
GPS-----
Digital
compass
Wi-Fi
(802.11)
a/b/g/na/b/g/n/ac
Bluetooth4.04.25.0
iBeacon
NFC-
FeliCa-
Siri
Barometer-
Three-axis
gyro
Accelero
-meter
Apple
Pencil
-1st Gen
Initial OS6.07.0.38.18.4.112.1.4
Latest OS9.3.59.3.612.5.314.7.1
Released2012.11.22012.11.162013.11.122014.10.242015.9.92019.3.18



iPad Proのハード仕様

ios13-4-ipad-pro-4gen-12-9-in.jpg 

DeviceiPad Pro
Generation5th Gen
(11" 3rd Gen)
ModelWi-FiWi-Fi + CellularWi-FiWi-Fi + Cellular
Capacity128GB
256GB
512GB
1TB
2TB
Height [mm]280.6247.6
Width [mm]214.9178.5
Depth [mm]6.45.9
Weight [g]682684466468
Display12.9" 2732 x 2048 264ppi11" 2388 x 1668 264ppi
3D Touch-
CPUM1 ?.??GHz
CPU ArchitectureARMv8.5-A
GPU8core GPU
Motion Coprocessor???
RAM8GB (128,256,512GB model)
16GB (1TB,2TB model)
iSight Camera12MP
Video Recording4K(60fps)
TrueDepth Camera12MP
Touch ID-
Face ID
Apple Pay
GPS--
Digital compass
Wi-Fi (802.11)Wi-Fi 6
Bluetooth5.0
iBeacon
NFC-
FeliCa-
Siri
Barometer
Three-axis gyro
Accelerometer
LiDAR
Apple Pencil2nd Gen
KeyboardSmart Keyboard Folio / Magic Keyboard
Initial OS14.5
Latest OS14.7.1
Released2021.5.21


DeviceiPad Pro
Generation1st Gen2nd Gen3rd Gen
(11" 1st Gen)
4th Gen
(11" 2nd Gen)
Model ※1
Capacity32GB
128GB
256GB
64GB
256GB
512GB
64GB
256GB
512GB
1TB
128GB
256GB
512GB
1TB
Height [mm]305.7240305.7250.6280.6247.6280.6247.6
Width [mm]220.6169.5220.6174.1214.9178.5214.9178.5
Depth [mm]6.96.16.96.15.95.95.95.9
Weight [g]713723437444677692469477631633468641643471473
Display12.9"
2732
x 2048
264ppi
9.7"
2048
x 1536
264ppi
12.9"
2732
x 2048
264ppi
10.5"
2224
x 1668
264ppi
12.9"
2732
x 2048
264ppi
11"
2388
x 1668
264ppi
12.9"
2732
x 2048
264ppi
11"
2388
x 1668
264ppi
3D Touch-
CPUA9X
2.26GHz
A9X
2.16GHz
A10X Fusion
2.39GHz
A12X Bionic
2.49GHz
A12Z Bionic
2.49GHz
CPU
Architecture
ARMv8-A
GPUPowerVR 7XT
(12core)
12core GPU7core GPU8core GPU
Motion
Coprocessor
M9M10M12
RAM4GB2GB4GB4GB
(64,256,
512GB model)
6GB
(1TB model)
6GB
iSight
Camera
8MP12MP
Video
Recording
1080p
(30fps)
4K
(30fps)
4K
(60fps)
FaceTime
Camera
1.2MP5MP7MP
Touch ID-
Face ID-
Apple Pay
GPS--------
Digital
compass
Wi-Fi
(802.11)
a/b/g/n/acWi-Fi 6
Bluetooth4.25.0
iBeacon
NFC-
FeliCa-
Siri
Barometer
Three-axis
gyro
Accelero
-meter
LiDAR-
Apple
Pencil
1st Gen2nd Gen
Keyboard-Smart KeyboardSmart Keyboard Folio
Magic Keyboard
Initial OS9.19.310.3.212.1.413.4
Latest OS14.7.1
Released2015.11.112016.3.312017.6.132018.11. 72020. 3.24

※1:○はWi-Fi model、●はWi-Fi+Cellular modelを表しています。

※  CPUの動作クロックにおいて、()内は実動クロック数です。

※『Released』は米国での発売日です。



参考文献

Wikipedia/List of iOS devices

iOS 11 - Apple(日本)

iPhone - Technical Specifications

iPhone 3G - 技術仕様

iPhone 3GS - 技術仕様

iPhone 4 - 技術仕様

iPhone 4S - 技術仕様

iPhone 5 - 技術仕様

iPhone 5c - 技術仕様

iPhone 5s - 技術仕様

iPhone 6 - 技術仕様

iPhone 6 Plus - 技術仕様

iPhone 6s - 技術仕様

iPhone 6s Plus - 技術仕様

iPhone SE - 技術仕様

iPhone 7 - 技術仕様

iPhone 7 Plus - 技術仕様

iPhone 8 - 技術仕様

iPhone 8 Plus - 技術仕様

iPhone X - 技術仕様

iPhone Xs - 技術仕様

iPhone Xs Max - 技術仕様

iPhone XR - 技術仕様

iPod touch - 技術仕様

iPod touch (第 2 世代) - 技術仕様

iPod touch (第 3 世代) - 技術仕様

iPod touch (第 4 世代) - 技術仕様

iPod touch (第 5 世代) - 技術仕様

iPod touch 16 GB (第 5 世代, Mid 2013) - 技術仕様

iPod touch (第 6 世代) - 技術仕様

iPad - 技術仕様

iPad 2 - 技術仕様

iPad (第 3 世代) - 技術仕様

iPad (第 4 世代) - 技術仕様

iPad Air - 技術仕様

iPad Air 2 - 技術仕様

iPad (第 5 世代) - 技術仕様

iPad mini - 技術仕様

iPad mini 2 Retinaディスプレイモデル - 技術仕様

iPad mini 3 - 技術仕様

iPad mini 4 - 技術仕様

iPad Pro (12.9インチ) - 技術仕様

iPad Pro (9.7インチ) - 技術仕様

iPad Pro (10.5インチ) - 技術仕様

iPad Pro (12.9-Inch) (2nd generation) - 技術仕様

Wikipedia/Apple Pay

Wikipedia/Siri

Wikipedia/iBeacon

Apple Support/Apple security updates


0 CommentsPosted in 資料

iOSデバイスとiOSの対応表

2021. 07. 27
●iPhone


DeviceiPhone
Model12 mini1212 Pro12 Pro Max
Released (iPhone)2020.11.132020.10.232020.11.13
iOS Ver.Released
14.12020.10.20
14.22020.11. 5
14.2.12020.11.19
14.32020.12.14
14.42021. 1.26
14.4.12021. 3. 8
14.4.22021. 3.26
14.52021. 4.26
14.5.12021. 5. 3
14.62021. 5.24
14.72021. 7.19
14.7.12021. 7.26


DeviceiPhone
Model6s6s
Plus
SE77
Plus
88
Plus
XXRXSXS
Max
1111
Pro
11 Pro
Max
SE
(2nd Gen)
Released (iPhone)2015
.9.25
2016
.9.16
2016
.9.16
2017
.9.22
2017
.11.3
2018
.10.26
2018
.9.21
2019
.9.20
2020
.4.24
iOS Ver.Released
9.02015. 9.16
9.0.12015. 9.23
9.0.22015. 9.30
9.12015.10.21
9.22015.12. 8
9.2.12016. 1.19
9.32016. 3.21
9.3.12016. 3.31
9.3.22016. 5.16
9.3.32016. 7.18
9.3.42016. 8. 4
9.3.52016. 8.25
9.3.62019. 7.22
10.02016. 9.13
10.0.12016. 9.13
10.0.22016. 9.23
10.0.32016.10.17
10.12016.10.24
10.1.12016.10.31
10.22016.12.12
10.2.12017. 1.23
10.32017. 3.27
10.3.12017. 4. 3
10.3.22017. 5.15
10.3.32017. 7.19
10.3.42019. 7.22
11.02017. 9.19
11.0.12017. 9.19
11.0.22017.10. 3
11.0.32017.10.11
11.12017.10.31
11.1.12017.11. 9
11.1.22017.11.16
11.22017.12. 2
11.2.12017.12.13
11.2.22018. 1. 8
11.2.52018. 1.23
11.2.62018. 2.19
11.32018. 3.29
11.3.12018. 4.24
11.42018. 5.29
11.4.12018. 7. 9
12.02018. 9.18
12.0.12018.10. 8
12.12018.10.30
12.1.12018.12.05
12.1.22018.12.17
12.1.32019. 1.22
12.1.42019. 2. 7
12.22019. 3.25
12.32019. 5.13
12.3.12019. 5.24
12.3.22019. 7.10
12.42019. 7.22
12.4.12019. 8.26
12.4.22019. 9.26
12.4.32019.10.28
12.4.42019.12.10
12.4.52020. 1.28
12.4.62020. 3.24
12.4.72020. 5.20
12.4.82020. 7.15
12.4.92020.11. 5
12.52020.12.14
12.5.12021. 1.11
12.5.22021. 3.26
12.5.32021. 5. 3
13.02019. 9.19
13.12019. 9.24
13.1.12019. 9.27
13.1.22019. 9.30
13.1.32019.10.15
13.22019.10.28
13.2.22019.11. 7
13.2.32019.11.18
13.32019.12.10
13.3.12020. 1.28
13.42020. 3.24
13.4.12020. 4. 7
13.52020. 5.20
13.5.12020. 6. 1
13.62020. 7.15
13.6.12020. 8.12
13.72020. 9. 1
14.02020. 9.16
14.0.12020. 9.24
14.12020.10.20
14.22020.11. 5
14.2.12020.11.19
14.32020.12.14
14.42021. 1.26
14.4.12021. 3. 8
14.4.22021. 3.26
14.52021. 4.26
14.5.12021. 5. 3
14.62021. 5.24
14.72021. 7.19
14.7.12021. 7.26


DeviceiPhone
Model3G3GS4 (GSM)4 (CDMA)4S55c5s66 Plus
Released (iPhone)2007
.6.29
2008
.7.11
2009
.6.19
2010
.6.24
2011
.2.10
2011
.10.14
2012
.9.21
2013
.9.20
2013
.9.20
2014
.9.19
iOS Ver.Released
1.02007. 6.29
1.0.12007. 7.31
1.0.22007. 8.21
1.12007. 9.14
1.1.12007. 9.27
1.1.22007.11.12
1.1.32008. 1.15
1.1.42008. 2.26
1.1.52008. 7.15
2.02008. 7.11
2.0.12008. 8. 4
2.0.22008. 8.18
2.12008. 9. 9
2.1.12008. 9.12
2.22008.11.21
2.2.12009. 1.27
3.02009. 6.17
3.0.12009. 7.31
3.12009. 9. 9
3.1.12009. 9. 9
3.1.22009.10. 8
3.1.32010. 2. 2
3.22010. 4. 3
3.2.12010. 7.15
3.2.22010. 8.11
4.02010. 6.21
4.0.12010. 7.15
4.0.22010. 8.11
4.12010. 9. 8
4.2-
4.2.12010.11.22
4.2.52011. 2. 7
4.2.62011. 2.10
4.2.72011. 4.14
4.2.82011. 5. 4
4.2.92011. 7.15
4.2.102011. 7.25
4.32011. 3. 9
4.3.12011. 3.25
4.3.22011. 4.14
4.3.32011. 5. 4
4.3.42011. 7.15
4.3.52011. 7.25
5.02011.10.12
5.0.12011.11.10
5.12012. 3.11
6.02012.10.12
6.0.12012.11.10
6.0.22012.12.18
6.12013. 1.28
6.1.12013. 2.11
6.1.22013. 2.19
6.1.32013. 3.19
6.1.42013. 5. 2
6.1.52013.11.14
6.1.62014. 2.21
7.02013. 9.18
7.0.12013. 9.19
7.0.22013. 9,26
7.0.32013.10.22
7.0.42013.11.14
7.0.52014. 1.29
7.0.62013. 2.21
7.12014. 3.10
7.1.12014. 4.22
7.1.22014. 6.30
8.02014. 9.17
8.0.12014. 9.24
8.0.22014. 9.25
8.12014.10.20
8.1.12014.11.17
8.1.22014.12. 9
8.1.32015. 1.27
8.22015. 3. 9
8.32015. 4. 8
8.42015. 7. 1
8.4.12015. 8.13
9.02015. 9.16
9.0.12015. 9.23
9.0.22015. 9.30
9.12015.10.21
9.22015.12. 8
9.2.12016. 1.19
9.32016. 3.21
9.3.12016. 3.31
9.3.22016. 5.16
9.3.32016. 7.18
9.3.42016. 8. 4
9.3.52016. 8.25
9.3.62019. 7.22
10.02016. 9.13
10.0.12016. 9.13
10.0.22016. 9.23
10.0.32016.10.17
10.12016.10.24
10.1.12016.10.31
10.22016.12.12
10.2.12017. 1.23
10.32017. 3.27
10.3.12017. 4. 3
10.3.22017. 5.15
10.3.32017. 7.19
10.3.42019. 7.22
11.02017. 9.19
11.0.12017. 9.19
11.0.22017.10. 3
11.0.32017.10.11
11.12017.10.31
11.1.12017.11. 9
11.1.22017.11.16
11.22017.12. 2
11.2.12017.12.13
11.2.22018. 1. 8
11.2.52018. 1.23
11.2.62018. 2.19
11.32018. 3.29
11.3.12018. 4.24
11.42018. 5.29
11.4.12018. 7. 9
12.02018. 9.18
12.0.12018.10. 8
12.12018.10.30
12.1.12018.12.05
12.1.22018.12.17
12.1.32019. 1.22
12.1.42019. 2. 7
12.22019. 3.25
12.32019. 5.13
12.3.12019. 5.24
12.3.22019. 7.10
12.42019. 7.22
12.4.12019. 8.26
12.4.22019. 8.26
12.4.32019.10.28
12.4.42019.12.10
12.4.52020. 1.28
12.4.62020. 3.24
12.4.72020. 5.20
12.4.82020. 7.15
12.4.92020.11. 5
12.52020.12.14
12.5.12021. 1.11
12.5.22021. 3.26
12.5.32021. 5. 3



●iPod touch

DeviceiPod touch
Model1st Gen2nd Gen3rd Gen4th Gen5th Gen6th Gen7th Gen
Released (iPod touch)2007.9.52008.9.92009.9.92010.9.12012.10.112015.7.152019.5.28
iOS Ver.Released
1.12007. 9.14
1.1.12007. 9.27
1.1.22007.11.12
1.1.32008. 1.15
1.1.42008. 2.26
1.1.52008. 7.15
2.02008. 7.11
2.0.12008. 8. 4
2.0.22008. 8.18
2.12008. 9. 9
2.1.12008. 9.12
2.22008.11.21
2.2.12009. 1.27
3.02009. 6.17
3.0.12009. 7.31
3.12009. 9. 9
3.1.12009. 9. 9
3.1.22009.10. 8
3.1.32010. 2. 2
3.22010. 4. 3
3.2.12010. 7.15
3.2.22010. 8.11
4.02010. 6.21
4.0.12010. 7.15
4.0.22010. 8.11
4.12010. 9. 8
4.2-
4.2.12010.11.22
4.2.52011. 2. 7
4.2.62011. 2.10
4.2.72011. 4.14
4.2.82011. 5. 4
4.2.92011. 7.15
4.2.102011. 7.25
4.32011. 3. 9
4.3.12011. 3.25
4.3.22011. 4.14
4.3.32011. 5. 4
4.3.42011. 7.15
4.3.52011. 7.25
5.02011.10.12
5.0.12011.11.10
5.12012. 3.11
6.02012.10.12
6.0.12012.11.10
6.0.22012.12.18
6.12013. 1.28
6.1.12013. 2.11
6.1.22013. 2.19
6.1.32013. 3.19
6.1.42013. 5. 2
6.1.52013.11.14
6.1.62014. 2.21
7.02013. 9.18
7.0.12013. 9.19
7.0.22013. 9,26
7.0.32013.10.22
7.0.42013.11.14
7.0.52014. 1.29
7.0.62013. 2.21
7.12014. 3.10
7.1.12014. 4.22
7.1.22014. 6.30
8.02014. 9.17
8.0.12014. 9.24
8.0.22014. 9.25
8.12014.10.20
8.1.12014.11.17
8.1.22014.12. 9
8.1.32015. 1.27
8.22015. 3. 9
8.32015. 4. 8
8.42015. 7. 1
8.4.12015. 8.13
9.02015. 9.16
9.0.12015. 9.23
9.0.22015. 9.30
9.12015.10.21
9.22015.12. 8
9.2.12016. 1.19
9.32016. 3.21
9.3.12016. 3.31
9.3.22016. 5.16
9.3.32016. 7.18
9.3.42016. 8. 4
9.3.52016. 8.25
10.02016. 9.13
10.0.12016. 9.13
10.0.22016. 9.23
10.0.32016.10.17
10.12016.10.24
10.1.12016.10.31
10.22016.12.12
10.2.12017. 1.23
10.32017. 3.27
10.3.12017. 4. 3
10.3.22017. 5.15
10.3.32017. 7.19
11.02017. 9.19
11.0.12017. 9.19
11.0.22017.10. 3
11.0.32017.10.11
11.12017.10.31
11.1.12017.11. 9
11.1.22017.11.16
11.22017.12. 2
11.2.12017.12.13
11.2.22018. 1. 8
11.2.52018. 1.23
11.2.62018. 2.19
11.32018. 3.29
11.3.12018. 4.24
11.42018. 5.29
11.4.12018. 7. 9
12.02018. 9.18
12.0.12018.10. 8
12.12018.10.30
12.1.12018.12.05
12.1.22018.12.17
12.1.32019. 1.22
12.1.42019. 2. 7
12.22019. 3.25
12.32019. 5.13
12.3.12019. 5.24
12.42019. 7.22
12.4.12019. 8.26
12.4.22019. 9.26
12.4.32019.10.28
12.4.42019.12.10
12.4.52020. 1.28
12.4.62020. 3.24
12.4.72020. 5.20
12.4.82020. 7.15
12.4.92020.11. 5
12.52020.12.14
12.5.12021. 1.11
12.5.22021. 3.26
12.5.32021. 5. 3
13.02019. 9.19
13.12019. 9.24
13.1.12019. 9.27
13.1.22019. 9.30
13.1.32019.10.15
13.22019.10.28
13.2.22019.11. 7
13.2.32019.11.18
13.32019.12.10
13.3.12020. 1.28
13.42020. 3.24
13.4.12020. 4. 7
13.52020. 5.20
13.5.12020. 6. 1
13.62020. 7.15
13.6.12020. 8.12
13.72020. 9. 1
14.02020. 9.16
14.0.12020. 9.24
14.12020.10.20
14.22020.11. 5
14.2.12020.11.19
14.32020.12.14
14.42021. 1.26
14.4.12021. 3. 8
14.4.22021. 3.26
14.52021. 4.26
14.5.12021. 5. 3
14.62021. 5.24
14.72021. 7.19
14.7.12021. 7.26



●iPad

DeviceiPad
ModeliPadiPad 2iPad (3rd)iPad (4th)iPad (5th)iPad (6th)iPad (7th)iPad (8th)
Released (iPad)2010
.4.3
2011
.3.11
2012
.3.16
2012
.11.2
2017
.3.24
2018
.3.27
2019
.9.30
2020
.9.18
iOS /
iPadOS
Ver.
Released
3.22010. 4. 3
3.2.12010. 7.15
3.2.22010. 8.11
4.02010. 6.21
4.0.12010. 7.15
4.0.22010. 8.11
4.12010. 9. 8
4.2-
4.2.12010.11.22
4.2.52011. 2. 7
4.2.62011. 2.10
4.2.72011. 4.14
4.2.82011. 5. 4
4.2.92011. 7.15
4.2.102011. 7.25
4.32011. 3. 9
4.3.12011. 3.25
4.3.22011. 4.14
4.3.32011. 5. 4
4.3.42011. 7.15
4.3.52011. 7.25
5.02011.10.12
5.0.12011.11.10
5.12012. 3.11
6.02012.10.12
6.0.12012.11.10
6.0.22012.12.18
6.12013. 1.28
6.1.12013. 2.11
6.1.22013. 2.19
6.1.32013. 3.19
6.1.42013. 5. 2
6.1.52013.11.14
6.1.62014. 2.21
7.02013. 9.18
7.0.12013. 9.19
7.0.22013. 9,26
7.0.32013.10.22
7.0.42013.11.14
7.0.52014. 1.29
7.0.62013. 2.21
7.12014. 3.10
7.1.12014. 4.22
7.1.22014. 6.30
8.02014. 9.17
8.0.12014. 9.24
8.0.22014. 9.25
8.12014.10.20
8.1.12014.11.17
8.1.22014.12. 9
8.1.32015. 1.27
8.22015. 3. 9
8.32015. 4. 8
8.42015. 7. 1
8.4.12015. 8.13
9.02015. 9.16
9.0.12015. 9.23
9.0.22015. 9.30
9.12015.10.21
9.22015.12. 8
9.2.12016. 1.19
9.32016. 3.21
9.3.12016. 3.31
9.3.22016. 5.16
9.3.32016. 7.18
9.3.42016. 8. 4
9.3.52016. 8.25
9.3.62019. 7.22
10.02016. 9.13
10.0.12016. 9.13
10.0.22016. 9.23
10.0.32016.10.17
10.12016.10.24
10.1.12016.10.31
10.22016.12.12
10.2.12017. 1.23
10.32017. 3.27
10.3.12017. 4. 3
10.3.22017. 5.15
10.3.32017. 7.19
10.3.42019. 7.22
11.02017. 9.19
11.0.12017. 9.19
11.0.22017.10. 3
11.0.32017.10.11
11.12017.10.31
11.1.12017.11. 9
11.1.22017.11.16
11.22017.12. 2
11.2.12017.12.13
11.2.22018. 1. 8
11.2.52018. 1.23
11.2.62018. 2.19
11.32018. 3.29
11.3.12018. 4.24
11.42018. 5.29
11.4.12018. 7. 9
12.02018. 9.18
12.0.12018.10. 8
12.12018.10.30
12.1.12018.12.05
12.1.22018.12.17
12.1.32019. 1.22
12.1.42019. 2. 7
12.22019. 3.25
12.32019. 5.13
12.3.12019. 5.24
12.42019. 7.22
12.4.12019. 8.26
12.4.22019. 9.26
12.4.32019.10.28
12.4.42019.12.10
12.4.52020. 1.28
12.4.62020. 3.24
12.4.72020. 5.20
12.4.82020. 7.15
12.4.92020.11. 5
12.52020.12.14
12.5.12021. 1.11
12.5.22021. 3.26
12.5.32021. 5. 3
13.12019. 9.24
13.1.12019. 9.27
13.1.22019. 9.30
13.1.32019.10.15
13.22019.10.28
13.2.22019.11. 7
13.2.32019.11.18
13.32019.12.10
13.3.12020. 1.28
13.42020. 3.24
13.4.12020. 4. 7
13.52020. 5.20
13.5.12020. 6. 1
13.62020. 7.15
13.6.12020. 8.12
13.72020. 9. 1
14.02020. 9.16
14.0.12020. 9.24
14.12020.10.20
14.22020.11. 5
14.2.12020.11.19
14.32020.12.14
14.42021. 1.26
14.4.12021. 3. 8
14.4.22021. 3.26
14.52021. 4.26
14.5.12021. 5. 3
14.62021. 5.24
14.72021. 7.21
14.7.12021. 7.26



●iPad Air

DeviceiPad Air
ModeliPad AiriPad Air 2iPad Air (3rd)iPad Air (4th)
Released (iPad)2013.11.12014.10.242019.3.182020.10.23
iOS / iPadOS Ver.Released
7.0.32013.10.22
7.0.42013.11.14
7.0.52014. 1.29
7.0.62013. 2.21
7.12014. 3.10
7.1.12014. 4.22
7.1.22014. 6.30
8.02014. 9.17
8.0.12014. 9.24
8.0.22014. 9.25
8.12014.10.20
8.1.12014.11.17
8.1.22014.12. 9
8.1.32015. 1.27
8.22015. 3. 9
8.32015. 4. 8
8.42015. 7. 1
8.4.12015. 8.13
9.02015. 9.16
9.0.12015. 9.23
9.0.22015. 9.30
9.12015.10.21
9.22015.12. 8
9.2.12016. 1.19
9.32016. 3.21
9.3.12016. 3.31
9.3.22016. 5.16
9.3.32016. 7.18
9.3.42016. 8. 4
9.3.52016. 8.25
10.02016. 9.13
10.0.12016. 9.13
10.0.22016. 9.23
10.0.32016.10.17
10.12016.10.24
10.1.12016.10.31
10.22016.12.12
10.2.12017. 1.23
10.32017. 3.27
10.3.12017. 4. 3
10.3.22017. 5.15
10.3.32017. 7.19
11.02017. 9.19
11.0.12017. 9.19
11.0.22017.10. 3
11.0.32017.10.11
11.12017.10.31
11.1.12017.11. 9
11.1.22017.11.16
11.22017.12. 2
11.2.12017.12.13
11.2.22018. 1. 8
11.2.52018. 1.23
11.2.62018. 2.19
11.32018. 3.29
11.3.12018. 4.24
11.42018. 5.29
11.4.12018. 7. 9
12.02018. 9.18
12.0.12018.10. 8
12.12018.10.30
12.1.12018.12.05
12.1.22018.12.17
12.1.32019. 1.22
12.1.42019. 2. 7
12.22019. 3.25
12.32019. 5.13
12.3.12019. 5.24
12.42019. 7.22
12.4.12019. 8.26
12.4.22019. 9.26
12.4.32019.10.28
12.4.42019.12.10
12.4.52020. 1.28
12.4.62020. 3.24
12.4.72020. 5.20
12.4.82020. 7.15
12.4.92020.11. 5
12.52020.12.14
12.5.12021. 1.11
12.5.22021. 3.26
12.5.32021. 5. 3
13.12019. 9.24
13.1.12019. 9.27
13.1.22019. 9.30
13.1.32019.10.15
13.22019.10.28
13.2.22019.11. 7
13.2.32019.11.18
13.32019.12.10
13.3.12020. 1.28
13.42020. 3.24
13.4.12020. 4. 7
13.52020. 5.20
13.5.12020. 6. 1
13.62020. 7.15
13.6.12020. 8.12
13.72020. 9. 1
14.02020. 9.16
14.0.12020. 9.24
14.12020.10.20
14.22020.11. 5
14.2.12020.11.19
14.32020.12.14
14.42021. 1.26
14.4.12021. 3. 8
14.4.22021. 3.26
14.52021. 4.26
14.5.12021. 5. 3
14.62021. 5.24
14.72021. 7.21
14.7.12021. 7.26



●iPad mini

DeviceiPad mini
ModeliPad miniiPad mini 2iPad mini 3iPad mini 4iPad mini (5th)
Released (iPad mini)2012.11.22013.11.122014.10.242015.9.92019.3.18
iOS / iPadOS Ver.Released
6.02012.10.12
6.0.12012.11.10
6.0.22012.12.18
6.12013. 1.28
6.1.12013. 2.11
6.1.22013. 2.19
6.1.32013. 3.19
6.1.42013. 5. 2
6.1.52013.11.14
6.1.62014. 2.21
7.02013. 9.18
7.0.12013. 9.19
7.0.22013. 9,26
7.0.32013.10.22
7.0.42013.11.14
7.0.52014. 1.29
7.0.62013. 2.21
7.12014. 3.10
7.1.12014. 4.22
7.1.22014. 6.30
8.02014. 9.17
8.0.12014. 9.24
8.0.22014. 9.25
8.12014.10.20
8.1.12014.11.17
8.1.22014.12. 9
8.1.32015. 1.27
8.22015. 3. 9
8.32015. 4. 8
8.42015. 7. 1
8.4.12015. 8.13
9.02015. 9.16
9.0.12015. 9.23
9.0.22015. 9.30
9.12015.10.21
9.22015.12. 8
9.2.12016. 1.19
9.32016. 3.21
9.3.12016. 3.31
9.3.22016. 5.16
9.3.32016. 7.18
9.3.42016. 8. 4
9.3.52016. 8.25
9.3.62019. 7.22
10.02016. 9.13
10.0.12016. 9.13
10.0.22016. 9.23
10.0.32016.10.17
10.12016.10.24
10.1.12016.10.31
10.22016.12.12
10.2.12017. 1.23
10.32017. 3.27
10.3.12017. 4. 3
10.3.22017. 5.15
10.3.32017. 7.19
11.02017. 9.19
11.0.12017. 9.19
11.0.22017.10. 3
11.0.32017.10.11
11.12017.10.31
11.1.12017.11. 9
11.1.22017.11.16
11.22017.12. 2
11.2.12017.12.13
11.2.22018. 1. 8
11.2.52018. 1.23
11.2.62018. 2.19
11.32018. 3.29
11.3.12018. 4.24
11.42018. 5.29
11.4.12018. 7. 9
12.02018. 9.18
12.0.12018.10. 8
12.12018.10.30
12.1.12018.12.05
12.1.22018.12.17
12.1.32019. 1.22
12.1.42019. 2. 7
12.22019. 3.25
12.32019. 5.13
12.3.12019. 5.24
12.42019. 7.22
12.4.12019. 8.26
12.4.22019. 9.26
12.4.32019.10.28
12.4.42019.12.10
12.4.52020. 1.28
12.4.62020. 3.24
12.4.72020. 5.20
12.4.82020. 7.15
12.4.92020.11. 5
12.52020.12.14
12.5.12021. 1.11
12.5.22021. 3.26
12.5.32021. 5. 3
13.12019. 9.24
13.1.12019. 9.27
13.1.22019. 9.30
13.1.32019.10.15
13.22019.10.28
13.2.22019.11. 7
13.2.32019.11.18
13.32019.12.10
13.3.12020. 1.28
13.42020. 3.24
13.4.12020. 4. 7
13.52020. 5.20
13.5.12020. 6. 1
13.62020. 7.15
13.6.12020. 8.12
13.72020. 9. 1
14.02020. 9.16
14.0.12020. 9.24
14.12020.10.20
14.22020.11. 5
14.2.12020.11.19
14.32020.12.14
14.42021. 1.26
14.4.12021. 3. 8
14.4.22021. 3.26
14.52021. 4.26
14.5.12021. 5. 3
14.62021. 5.24
14.72021. 7.21
14.7.12021. 7.26



●iPad Pro

DeviceiPad Pro
Model1st Gen2nd Gen3rd Gen4th Gen
Display12.9"9.7"12.9"10.5"12.9"11"(1st Gen)12.9"11"(2nd Gen)
Released (iPad Pro)2015.11.112016.3.312017.6.132018.11.72020. 3.24
iOS / iPadOS Ver.Released
9.12015.10.21
9.22015.12. 8
9.2.12016. 1.19
9.32016. 3.21
9.3.12016. 3.31
9.3.22016. 5.16
9.3.32016. 7.18
9.3.42016. 8. 4
9.3.52016. 8.25
10.02016. 9.13
10.0.12016. 9.13
10.0.22016. 9.23
10.0.32016.10.17
10.12016.10.24
10.1.12016.10.31
10.22016.12.12
10.2.12017. 1.23
10.32017. 3.27
10.3.12017. 4. 3
10.3.22017. 5.15
10.3.32017. 7.19
11.02017. 9.19
11.0.12017. 9.19
11.0.22017.10. 3
11.0.32017.10.11
11.12017.10.31
11.1.12017.11. 9
11.1.22017.11.16
11.22017.12. 2
11.2.12017.12.13
11.2.22018. 1. 8
11.2.52018. 1.23
11.2.62018. 2.19
11.32018. 3.29
11.3.12018. 4.24
11.42018. 5.29
11.4.12018. 7. 9
12.02018. 9.18
12.0.12018.10. 8
12.12018.10.30
12.1.12018.12.05
12.1.22018.12.17
12.1.32019. 1.22
12.1.42019. 2. 7
12.22019. 3.25
12.32019. 5.13
12.3.12019. 5.24
12.42019. 7.22
12.4.12019. 8.26
12.4.22019. 9.26
12.4.32019.10.28
12.4.42019.12.10
12.4.52020. 1.28
12.4.62020. 3.24
12.4.72020. 5.20
12.4.82020. 7.15
12.4.92020.11. 5
12.52020.12.14
12.5.12021. 1.11
12.5.22021. 3.26
12.5.32021. 5. 3
13.12019. 9.24
13.1.12019. 9.27
13.1.22019. 9.30
13.1.32019.10.15
13.22019.10.28
13.2.22019.11. 7
13.2.32019.11.18
13.32019.12.10
13.3.12020. 1.28
13.42020. 3.24
13.4.12020. 4. 7
13.52020. 5.20
13.5.12020. 6. 1
13.62020. 7.15
13.6.12020. 8.12
13.72020. 9. 1
14.02020. 9.16
14.0.12020. 9.24
14.12020.10.20
14.22020.11. 5
14.2.12020.11.19
14.32020.12.14
14.42021. 1.26
14.4.12021. 3. 8
14.4.22021. 3.26
14.52021. 4.26
14.5.12021. 5. 3
14.62021. 5.24
14.72021. 7.21
14.7.12021. 7.26



※ ●は対応、▲はマルチタスクなどの一部機能が制限されていることを示します。
※ ○はWi-Fi + Cellularモデルのみ対応していることを示します。
※ iOS 4.2は正式リリースされず、4.2.1に置き換えられています。
※ iOS 7.0.5は中国で販売されていたiPhone 5s / 5cのみ対象です。
※ iOS 13.2.1はHomePodのみ対象です。



参考文献

Wikipedia/iOS(アップル)

Wikipedia/iOS(Apple)

Wikipedia/IOS version history

Wikipedia/List of iOS devices

Wikipedia/iPhone

Wikipedia/iPod Touch

Wikipedia/iPad

Apple Support/Apple security updates


6 CommentsPosted in 資料

詳細!Swift iPhoneアプリ開発 入門ノート(5)〜PART 5 クラス、構造体、列挙型

2021. 04. 20
この記事は「詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応(初版第1刷)を元に、Xcode 12.4(Swift 5.3.2)下における差異や覚書を記述しています。

手元にあって未読だったものを今頃読んでいるだけですので「詳細! SwiftUI iPhoneアプリ開発入門ノート[2020] iOS 14+Xcode 12対応
2020年12月5日発売の最新版)」なら、この記事を読む必要も無駄な苦労をすることもないため、最新版の購入をお勧めします。



PART 5 クラス、構造体、列挙型



●Chapter 5-1 クラス定義


・複数のイニシャライザを定義する

「List 2つのイニシャライザをもつ MyClass クラス」において、イニシャライザ1でインスタンスプロパティ name を初期化していませんが、「Swift入門ノート/Swift入門ノート: Swift 1.2の変更への対応」にあるように、現在は全ての格納型プロパティを初期化しないとエラーが出ますので 、宣言時あるいはイニシャライザで値を設定する必要があります。

init(msg: String = "ハロー") {
    self.msg = msg
}    // error: return from initializer without initializing all stored properties

init(msg: String = "ハロー") {
    self.msg = msg
    self.name = nil
}


・クラスメンバー

「List クラスプロパティを宣言する」の説明において、「クラスプロパティは現バージョン(Swift 1.1)では未実装です」とありますが、現在クラスプロパティ自体は実装されているもののクラスプロパティは計算型(Computed プロパティ)に限定されており、格納型ではエラーになりますので計算型プロパティにするかタイププロパティとして宣言することになります。

class let version: String = "1.0.0"    // error: class stored properties not supported in classes; did you mean 'static'?
class var userCount: UInt = 3    // error: class stored properties not supported in classes; did you mean 'static'?

// タイププロパティの場合
static let version: String = "1.0.0"
static var userCount: Int = 3


・アクセス権

「internal」において、「internal の設定は他のファイルからでも自由に利用できます」とありますが、正確には「定義されているファイルと同じモジュール(ターゲット)の内なら、他のファイルからでもアクセスできます」。
(「詳解 Swift 第5版/CHAPTER 11 エラー処理/11.3 アクセス制御/アクセス制御の5つの種類(P.293)」参照)

「private」において、「private に設定にすると、それらのメンバーは同一ファイルからのみアクセスできる」とありますが、Swift 3 以降は同一ファイルから可能なアクセスは追加された fileprivate になっており、private はクラスや構造体など定義単位の中のみのアクセスに変更されています。
(「詳解Swift改訂版(12)〜エラー処理/CHAPTER 12 エラー処理/12.3 アクセス制御/プロパティのアクセス制御」、「詳解 Swift 第5版/CHAPTER 11 エラー処理/11.3 アクセス制御/アクセス制御の5つの種類(P.293)」参照)


・アクセス権を設定したクラスの例

「List CarDrive.swift に定義してある Car クラスと Drive クラス」において、表題は「List BankManagement.swift に定義してある Bank クラスと BankManager クラス」の誤りです。

同様に「List ViewController.swift の ViewController クラスから Drive クラスを使う」において、表題は「List ViewController.swift の ViewController クラスから BankManager クラスを使う」の誤りです。



●Chapter 5-2 クラスの拡張


・継承やオーバーライドを制限する final

P.180の下から3行目に「final fun のようにメソッド定義の前に〜」とありますが「final func のように〜」の誤りです。


・エクステンションによるクラス拡張

「List String クラスを拡張して rotation() を追加する」において、11行目のインスタンスメソッド substringToIndex: および12行目のインスタンスメソッド substringFromIndex: はそれぞれ substring(to:)substring(from:) に改名されています。

firstStr = str.substringToIndex(1)    // error: 'substringToIndex' has been renamed to 'substring(to:)'
restStr = str.substringFromIndex(1)    // error: 'substringFromIndex' has been renamed to 'substring(from:)'

firstStr = str.substring(to: 1)
restStr = str.substring(from: 1)

改名されたメソッドは NSString インスタンスメソッドなのですが、返り値が String 型なので NSString 型の変数 str に代入しようとするとエラーになります。

str = restStr + firstStr    // error: cannot assign value of type 'String' to type 'NSString'

しかしいつまでも NSString 型のメソッドを使うわけにもいかないので、substringToIndex: は prefix(_:)、substringFromIndex: は dropFirst(_:) と String 型のインスタンスメソッドに置き換えます。
(「詳細!Swift iPhoneアプリ開発 入門ノート(3)〜PART 3 ストリングとコレクション/PART 3 ストリングとコレクション/Chapter 3-1 ストリング String/NSString に変換して部分文字列を抜き出す」参照)

extension String {
    // 文字の並びをローテーションさせる
    func rotation(count: Int) -> String {
        var str = self
        var firstStr: String, restStr: String
        // ストリングの1文字目を後ろに回す
        for _ in 1...count {
            firstStr = String(str.prefix(1))
            restStr = String(str.dropFirst(1))
            str = restStr + firstStr
        }
        return str
    }
}



●Chapter 5-3 列挙型 enum


・列挙型に関数を定義する

項の2行目に「この値に値して〜」とありますが、「ソーテック社/詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応 サポートページ」の「1刷正誤表」にあるように「この値に対して〜」の誤りです。


・Enum Value に Raw Value を割り振る

「List 列挙型の値を数値に変換する」において、2行目の値型の列挙型 Direction で実体値(raw value)から列挙ケース(enum value)を得る方法はイニシャライザ init?(rawValue: Int) であり、指定した実体値に対応するケースが無い場合は nil になるため返り値はオプショナル型になりますので、確実にケースがあるなら開示した方が良いでしょう。

print(Direction(rawValue: 3))    // Optional(__lldb_expr_11.Direction.right)
// Expression implicitly coerced from 'Direction?' to 'Any'


print(Direction(rawValue: 3)!)    // right



●Chapter 5-4 構造体 struct


・構造体の書式

「List 構造体を作る」の後の説明文において、「Swift入門ノート/Swift入門ノート: Swift 1.2の変更への対応」にあるように現在は定義で定数に初期値を設定した場合はインスタンス生成時に初期値を与えることはできません。

「color は let で定義してある定数ですが、構造体を作るタイミングでは値を設定できます。しかし、いったん構造体が作られてしまうと、定数の color プロパティの値は変更できなくなります。」という説明文は「color は let で定義してある定数なので作る際に値を指定しません。」となります。

「List WhiteBox 構造体の初期値を指定して作成する」においても、定数定義されている第3引数を指定することはできません。

var myBox = WhiteBox(width: 150, height: 200, color: "green")    // error: extra argument 'color' in call

var myBox = WhiteBox(width: 150, height: 200)
print((myBox.width, myBox.height, myBox.color))    // (150, 200, "white")


・構造体のコピー

P.202の4行目において、「cBox1 と cBox2 は同じ構造体を参照している〜」とありますが、「cBox1 と cBox2 は同じクラスインスタンスを参照している〜」の誤りです。


・関数がある構造体

「List 直線を定義する構造体」と「List 直線を作って平行移動する」において、「Swift入門ノート/Swift入門ノート: Swift 1.2の変更への対応」にあるように構造体 Point の定義が本書に記載されていないので追加する必要があります。

struct Point {
    var v: Int
    var h: Int
}

「List 直線を作って平行移動する」において、最後の2行の print() 文の文字列埋め込みはタプルにしないとエラーになります。

print("移動後のp1の座標 \(p1.h, p1.v)")    // error: extra argument in call
print("移動後のp2の座標 \(p2.h, p2.v)")    // error: extra argument in call

print("移動後のp1の座標 \((p1.h, p1.v))")    // 移動後のp1の座標 (150, 160)
print("移動後のp2の座標 \((p2.h, p2.v))")    // 移動後のp2の座標 (250, 360)



Swift入門ノート/Swift入門ノート: Swift 1.2の変更への対応

ソーテック社/詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応 サポートページ

詳細! SwiftUI iPhoneアプリ開発入門ノート[2020] iOS 14+Xcode 12対応


詳細!Swift iPhoneアプリ開発 入門ノート(4)〜PART 4 オプショナル、関数、クロージャ

2021. 04. 04
この記事は「詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応(初版第1刷)を元に、Xcode 12.4(Swift 5.3.2)下における差異や覚書を記述しています。

手元にあって未読だったものを今頃読んでいるだけですので「詳細! SwiftUI iPhoneアプリ開発入門ノート[2020] iOS 14+Xcode 12対応
2020年12月5日発売の最新版)」なら、この記事を読む必要も無駄な苦労をすることもないため、最新版の購入をお勧めします。



PART 4 オプショナル、関数、クロージャ



●Chapter 4-1 オプショナル


・オプショナルバリューが nil のときの初期値 ??

「オプショナルバリューが nil のとき ?? 演算子で初期値を指定できる」という表現に戸惑うかもしれませんが、これは「nil 合体演算子」のことで、「List 変数 count が nil の場合の値を指定する」の場合ですと
「変数 count が開示できる値なら count! を、nil の場合は代わりに 2 を返す」
ということで、三項演算子で表すと

let value = 250 * (count ?? 2)

let value = 250 * ((count != nil) ? count! : 2)

となります。
(「詳解 Swift 第5版/CHAPTER 04 オプショナル/4.2 オプショナル束縛構文/nil 合体演算子(P.102)」参照)


・オプショナルバインディング

オプショナルバインディングは「詳解 Swift 第5版」で言うところの「オプショナル束縛構文(if-let 文)」のことです。
(「詳解 Swift 第5版/CHAPTER 04 オプショナル/4.2 オプショナル束縛構文/if-let 文(P.99)」参照)

「List 値が nil でなければ変数に入っていた文字を連結する」において、7行目のインクリメント演算子は「+= 1」に修正します。

if (i++ > 10) {    // error: cannot find operator '++' in scope; did you mean '+= 1'?
    break
}

if i > 10 {
    break
}
i += 1


・オプショナルチェインニング

オプショナルチェインニングは「詳解 Swift 第5版」で言うところの「オプショナルチェーン」のことです。
(「詳解 Swift 第5版/CHAPTER 09 メモリ管理/9.3 オプショナルチェーン/オプショナルチェーンとは(P.245)」参照)

「List Player クラスのインスタンスの magic プロパティにアクセスする」において、3行目でオプショナルチェーンの値を判定無しに開示していますが、現在はこのような記述はエラーになります。

変数 spell は直後に出力に使っているので、(オプショナルではない)String 型とするなら nil 合体演算子などを使うと良いでしょう。

var spell = user.magic?.spell as String!    // error: using '!' is not allowed here; perhaps '?' was intended?

var spell = user.magic?.spell ?? ""    // 例: プロパティ magic が nil の場合は空文字列を代入をする


・メソッドの戻りがオプショナルバリューの場合

「List Magic クラス」において、13行目の countElements() は String 型のインスタンスプロパティ count に変更します。

self.magicPower = countElements(spell) / 2    // error: cannot find 'countElements' in scope

self.magicPower = spell.count / 2

15行目の arc4random_uniform() 関数は Int 型のタイプメソッド random(in:) に変更します。

let index = Int(arc4random_uniform(3))

let index = Int.random(in: 0 ..< 3)

27行目のデクリメント演算子は「-= 1」に修正します。

magicPower--    // error: cannot find operator '--' in scope; did you mean '-= 1'?

magicPower -= 1

また末尾にクラス宣言を閉じる「}」が抜けているので追加します。

「List オプショナルチェインニングを使って Magic クラスのメンバーにアクセスする」において、5行目の「〜 as Int!」と6行目の「〜 as String!」という記述は前述の通りエラーになりますので、nil 合体演算子などで nil の際の値を設定します。

var mp = user.magic?.magicPower as Int!    // error: using '!' is not allowed here; perhaps '?' was intended?
var spell = user.magic?.doMagic()?.spell as String!    // error: using '!' is not allowed here; perhaps '?' was intended?

let mp = user.magic?.magicPower ?? 0
let spell = user.magic?.doMagic()?.spell ?? "nil"



●Chapter 4-2 関数


・引数がない関数

ソーテック社/詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応 サポートページ」の「1刷正誤表」にあるように1行目の「関数で処理するステートメントに書き、〜」は「関数で処理するステートメントを書き、〜」の誤りです。

「List 1〜6の中から整数を1個返す」において、3行目の arc4random_uniform() 関数は Int 型のタイプメソッド random(in:) に変更します。

let number = 1 + Int(arc4random_uniform(6))

let number = Int.random(in: 1...6)


・引数がある関数

「List 引数があるグローバル関数を呼び出す」において、直前の説明に「グローバル関数を呼び出す場合には、外部引数名が設定されてない場合は引数にラベルを付けません」とありますが、現在は関数とメソッドで外部引数名の扱いに違いはなく、引数には必ずラベルを付ける必要があります。
(以降も引数ラベルを省略していた場合はエラーになりますので、適宜修正してください)

let ans = plus(5, 6)    // error: missing argument labels 'a:b:' in call

let ans = plus(a: 5, b: 6)

呼び出し時に引数名を省略したい場合は外部引数名を「_」と設定します。

「List 引数を省略して試してみる」において、出力結果が「〜様、ごきげんよう」となっていますが「〜様、こんにちは」の誤りです。


・引数を変数宣言する

「List 引数の変数宣言」において、現在は関数の引数を変数として宣言することはできません。
(「詳解Swift改訂版(02)〜関数/2.2 関数定義におけるさまざまな設定/引数の値を処理中に変更できるようにする」参照)

引数の値を変更したい場合は、関数内で別途変数を定義して代入します。

func price(var yen: Int) -> Int {    // 'var' in this position is interpreted as an argument label

func price(yen: Int) -> Int {
    var yen = yen

また3行目の関数 floor は小数点以下を切り捨てる関数ですが、Int 型のイニシャライザ init(_:) も小数点以下を切り捨てるので不要です。

yen = Int(floor(Double(yen) * tax))

yen = Int(Double(yen) * tax)


・引数に外部引数名を付ける

「List bmi() 関数を呼び出す」において、出力結果が示されていませんが「20.5」になります。

print(bmiResult)    // 20.5

「List 外部引数名を省略する」において、Swift 2.0 から外部引数名と内部引数名を同じにするための簡略表現「#」は削除されました。
(「詳解Swift(2)〜関数/2.1 関数定義の基本/外部引数名」参照。ただしここで説明している第1引数の特別扱いは Swift 3 で変更され、関数の全ての引数は一貫してラベル付けを行うことになっているので注意してください。(「詳解Swift改訂版(02)〜関数/2.1 関数定義の基本/外部引数名」参照))

func kingaku(#tanka: UInt, kosu: UInt) -> UInt {    // error: expected parameter name followed by ':'

func kingaku(tanka: Int, kosu: Int) -> Int {

「List グローバル関数での外部変数名の省略」においても同様に「#」は不要です。
(以降も引数の頭に「#」が付いている場合はエラーになりますので、適宜修正してください)

func kingaku(#tanka: UInt, #kosu: UInt) -> UInt {    //error: expected parameter name followed by ':'

func kingaku(tanka: Int, kosu: Int) -> Int {


・戻り値がない関数(メソッドの定義)

「戻り値がなく、処理を行うだけの関数はメソッドと呼ばれます」とありますが、「詳解 Swift 第5版/CHAPTER 02 関数(P.37)」に「関数はクラスや構造体の要素として定義されるとメソッドとなり〜」とあるように、クラスや構造体などのメンバとして属する関数をメソッドと呼び、戻り値(返り値)の有無で関数とメソッドを呼び分けることはありません。


・よく使う関数

arc4random() 関数や arc4random_uniform() 関数など、現在乱数の生成には Int 型のタイプメソッド random(in:) を使用します。

指定する範囲型やジェネレータの有無によって4種類あります。

Int 型
static func random(in: Range<Int>) -> Int上限値を含まない範囲での乱数を返す
static func random<T>(in: Range<Int>, using: inout T) -> Int指定されたジェネレータを使用して
上限値を含まない範囲での乱数を返す
static func random(in: ClosedRange<Int>) -> Int上限値を含む範囲での乱数を返す
static func random<T>(in: ClosedRange<Int>, using: inout T) -> Int指定されたジェネレータを使用して
上限値を含む範囲での乱数を返す

整数だけでなく実数の Float 型や Double 型の乱数も生成できます。

Float 型
static func random(in: Range<Float>) -> Float上限値を含まない範囲での乱数を返す
static func random<T>(in: Range<Float>, using: inout T)
-> Float
指定されたジェネレータを使用して
上限値を含まない範囲での乱数を返す
static func random(in: ClosedRange<Float>) -> Float上限値を含む範囲での乱数を返す
static func random<T>(in: ClosedRange<Float>, using: inout T)
-> Float
指定されたジェネレータを使用して
上限値を含む範囲での乱数を返す

Double 型
static func random(in: Range<Double>) -> Double上限値を含まない範囲での乱数を返す
static func random<T>(in: Range<Double>, using: inout T)
-> Double
指定されたジェネレータを使用して
上限値を含まない範囲での乱数を返す
static func random(in: ClosedRange<Double>) -> Double上限値を含む範囲での乱数を返す
static func random<T>(in: ClosedRange<Double>, using: inout T)
-> Double
指定されたジェネレータを使用して
上限値を含む範囲での乱数を返す

arc4random()    // 2449476986
arc4random_uniform(100)    // 36

Int.random(in: 1...100)    // 55
Float.random(in: 1.0...100.0)    // 1.365033
Double.random(in: 1.0...100.0)    // 81.10446859584628

実数を丸める ceil() 関数や floor() 関数、round() 関数も、現在は Float 型や Double 型のインスタンスメソッドを使用します。

値を返すか自身に適用するか、丸め規則を指定するかによってそれぞれ4種類あります。

Float 型
func rounded() -> Float四捨五入した値を返す
(round() 関数と同じ)
func rounded(FloatingPointRoundingRule) -> Float指定された丸め規則を使用して
四捨五入した値を返す
func round()値を四捨五入する
func round(FloatingPointRoundingRule)指定された丸め規則を使用して
値を四捨五入する

Double 型
func rounded() -> Double四捨五入した値を返す
(round() 関数と同じ)
func rounded(FloatingPointRoundingRule) -> Double指定された丸め規則を使用して
四捨五入した値を返す
func round()値を四捨五入する
func round(FloatingPointRoundingRule)指定された丸め規則を使用して
値を四捨五入する

丸め規則は6種類あり、列挙型 FloatingPointRoundingRule で定義されています。
(「2速で歩くヒト/【Swift】小数の丸め処理(round, rounded)のまとめ」参照)

FloatingPointRoundingRule
awayFromZero0から離れるように元の値以上に丸めた値を返す
down元の値以下に丸めた値を返す(floor() 関数と同じ)
toNearestOrAwayFromZero四捨五入した値を返す(round() 関数と同じ)
toNearestOrEven元の値から近い偶数に丸めた値を返す
towardZero0に近づくように元の値以下に丸めた値を返す
up元の値以上に丸めた値を返す(ceil() 関数と同じ)

let sample = [6.5, 5.5, 5.4, -5.4, -5.5, -6.5]

// round: 小数点以下を四捨五入
print("round: ", terminator: "")
for smp in sample {
    let tmp = round(smp)
    print("\(tmp), ", terminator: "")
}
print()    // round: 7.0, 6.0, 5.0, -5.0, -6.0, -7.0,

// rounded: 小数点以下を四捨五入
print("rounded: ", terminator: "")
for smp in sample {
    let tmp = smp.rounded()
    print("\(tmp), ", terminator: "")
}
print()    // rounded: 7.0, 6.0, 5.0, -5.0, -6.0, -7.0,

// toNearestOrAwayFromZero: round() 関数と同じ
print("toNearestOrAwayFromZero: ", terminator: "")
for smp in sample {
    let tmp = smp.rounded(.toNearestOrAwayFromZero)
    print("\(tmp), ", terminator: "")
}
print()    // toNearestOrAwayFromZero: 7.0, 6.0, 5.0, -5.0, -6.0, -7.0,

C 言語の関数と Swift のインスタンスメソッドとの比較一覧を示します。

元の値6.55.55.4-5.4-5.5-6.5
Cceil()7.06.06.0-5.0-5.0-6.0
floor()6.05.05.0-6.0-6.0-7.0
round()7.06.05.0-5.0-6.0-7.0
Swiftrounded()7.06.05.0-5.0-6.0-7.0
.awayFromZero7.06.06.0-6.0-6.0-7.0
.down6.05.05.0-6.0-6.0-7.0
.toNearestOrAwayFromZero7.06.05.0-5.0-6.0-7.0
.toNearestOrEven6.06.05.0-5.0-6.0-6.0
.towardZero6.05.05.0-5.0-5.0-6.0
.up7.06.06.0-5.0-5.0-6.0

小数点以下を切り上げ
元の値6.55.55.4-5.4-5.5-6.5
Cceil()7.06.06.0-5.0-5.0-6.0
Swift.up7.06.06.0-5.0-5.0-6.0

小数点以下を切り下げ
元の値6.55.55.4-5.4-5.5-6.5
Cfloor()6.05.05.0-6.0-6.0-7.0
Swift.down6.05.05.0-6.0-6.0-7.0

小数点以下を四捨五入
元の値6.55.55.4-5.4-5.5-6.5
Cround()7.06.05.0-5.0-6.0-7.0
Swiftrounded()7.06.05.0-5.0-6.0-7.0
.toNearestOrAwayFromZero7.06.05.0-5.0-6.0-7.0

実数の引数2つの大小を比較する fmax() 関数と fmin() 関数も、現在は Float 型や Double 型のタイプメソッドを使用します。

2つの引数で大きい方を返すか小さい方を返すか、符号を考慮するか絶対値としての大きさかによってそれぞれ4種類あります。

Float 型
static func maximum(Float, Float) -> Float与えられた2つの値のうち大きい方を返す
(fmax() 関数と同じ)
static func maximumMagnitude(Float, Float) -> Float(絶対値として)大きさが大きい方を返す
static func minimum(Float, Float) -> Float与えられた2つの値のうち小さい方を返す
(fmin() 関数と同じ)
static func minimumMagnitude(Float, Float) -> Float(絶対値として)大きさが小さい方を返す

Double 型
static func maximum(Double, Double) -> Double与えられた2つの値のうち大きい方を返す
(fmax() 関数と同じ)
static func maximumMagnitude(Double, Double) -> Double(絶対値として)大きさが大きい方を返す
static func minimum(Double, Double) -> Double与えられた2つの値のうち小さい方を返す
(fmin() 関数と同じ)
static func minimumMagnitude(Double, Double) -> Double(絶対値として)大きさが小さい方を返す

nan は非数(not a number)で、プロトコル FloatingPoint のタイププロパティです。

fmax(10.0, -25.0)    // 10.0
fmax(10.0, Double.nan)    // 10.0
fmax(Double.nan, -25.0)    // -25.0
fmax(Double.nan, Double.nan)    // nan

Double.maximum(10.0, -25.0)    // 10.0
Double.maximum(10.0, .nan)    // 10.0
Double.maximum(.nan, -25.0)    // -25.0
Double.maximum(.nan, .nan)    // nan

Double.maximumMagnitude(10.0, -25.0)    // -25.0
Double.maximumMagnitude(10.0, .nan)    // 10.0
Double.maximumMagnitude(.nan, -25.0)    // -25.0
Double.maximumMagnitude(.nan, .nan)    // nan

実数の剰余を求める fmod() 関数も、現在は Float 型や Double 型のインスタンスメソッドを使用します。

値を返すか自身に適用するか、適用する丸め規則の違いによってそれぞれ4種類あります。
(「Qiita/SwiftのFloat系の演算で余り演算子(%)が廃止、それに変わるメソッドはだるま落としと最寄駅」参照)

Float 型
func remainder(dividingBy: Float) -> Float与えられた値で割った余りを返す
商は最近接偶数への丸め(.toNearestOrEven)
func formRemainder(dividingBy: Float)与えられた値で割った余りで置き換える
商は最近接偶数への丸め(.toNearestOrEven)
func truncatingRemainder(dividingBy: Float) -> Float与えられた値で割った余りを返す
商は小数点以下を切り捨て(.towardZero)
(fmod() 関数と同じ)
func formTruncatingRemainder(dividingBy: Float)与えられた値で割った余りで置き換える
商は小数点以下を切り捨て(.towardZero)

Double 型
func remainder(dividingBy: Double) -> Double与えられた値で割った余りを返す
商は最近接偶数への丸め(.toNearestOrEven)
func formRemainder(dividingBy: Double)与えられた値で割った余りで置き換える
商は最近接偶数への丸め(.toNearestOrEven)
func truncatingRemainder(dividingBy: Double) -> Double与えられた値で割った余りを返す
商は小数点以下を切り捨て(.towardZero)
(fmod() 関数と同じ)
func formTruncatingRemainder(dividingBy: Double)与えられた値で割った余りで置き換える
商は小数点以下を切り捨て(.towardZero)

// fmod()
let x0 = fmod(8.625, 0.75)    // 0.375

// remainder(dividingBy:)
let q1 = (8.625 / 0.75).rounded(.toNearestOrEven)    // 12: 再近接偶数に丸めた商
let r1 = (8.625).remainder(dividingBy: 0.75)    // -0.375
let x1 = 0.75 * q1 + r1    // 8.625

// truncatingRemainder(dividingBy:)
let q2 = (8.625 / 0.75).rounded(.towardZero)    // 11: 小数点以下を切り捨てた商
let r2 = (8.625).truncatingRemainder(dividingBy: 0.75)    // 0.375
let x2 = 0.75 * q2 + r2    // 8.625

絶対値を求める abs() 関数と fabs() 関数も、現在はジェネリック関数の abs(_:) か各型のインスタンスプロパティ magnitude を使用します。

ジェネリック関数 abs(_:) は与えられた値と同型の絶対値を返しますが、型の最小値など返り値がその型で表現できない場合はエラーになります。

インスタンスプロパティ magnitude も絶対値を表しますが、Int 型の場合は返り値が UInt 型になるので上記のような型の最小値も表すことができます。

ただし一般的に馴染み深く、同じ型を返すジェネリック関数 abs(_:) の使用が推奨されています。

func abs<T>(T) -> T与えられた値の絶対値を返す
(abs() 関数や fabs() 関数と同じ)
var magnitude: UIntこの値の大きさ(Int 型)
var magnitude: Floatこの値の大きさ(Float 型)
var magnitude: Doubleこの値の大きさ(Double 型)

let x = Int8.min    // -128
let y0 = abs(x)    // error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
let y1 = x.magnitude    // 128
type(of: y1)    // UInt8.Type

平方根を求める sqrt() 関数も、現在は Float 型や Double 型のインスタンスメソッドを使用します。

値を返すか自身に適用するかによってそれぞれ2種類あります。

Float 型
func squareRoot() -> Float表現可能な値に丸められた平方根を返す
func formSquareRoot()表現可能な値に丸められた平方根で置き換える

Double 型
func squareRoot() -> Double表現可能な値に丸められた平方根を返す
func formSquareRoot()表現可能な値に丸められた平方根で置き換える

func hypotenuse(_ a: Double, _ b: Double) -> Double {
    return (a * a + b * b).squareRoot()
}

let (dx, dy) = (3.0, 4.0)
let distance = hypotenuse(dx, dy)    // 5

累乗は Foundation フレームワーク(/Numbers, Data, and Basic ValuesDecimal/)の関数 pow(_:_:) を使用します。

三角関数は Kernel フレームワーク(/Math/)の関数 cossintanacosasinatanatan2 を使用します。



●Chapter 4-3 関数オブジェクト


・関数を変数に代入して使う

「List calc() 関数を変数 myCalc に代入して使う」において、2行目の定数 myCalc の呼び出しで引数ラベルを指定するとエラーになるのでラベルは省略する必要があります。

let kingaku = myCalc(tanka: 280, kosu: 4)    // error: extraneous argument labels 'tanka:kosu:' in call

let kingaku = myCalc(280, 4)


なお関数 calc を定数や変数に代入する際は、(オーバーロードによる同名別関数を区別できるよう)引数ラベルを指定することもできます。
(呼び出し時にラベルを省略するのは変わりません)

let myCalc = calc(tanka:kosu:)


・関数オブジェクトを引数にする

「List 第1引数で関数、第2引数でストリングを受ける command() 関数」において、引数に関数を渡す際は、渡す関数の引数を ( ) で括る必要があります。

func command(someFunc: String -> String, user: String) -> String {
// error: single argument function types require parentheses

func command(someFunc: (String) -> String, user: String) -> String {



●Chapter 4-4 クロージャ


・クロージャを引数で受け取る関数

「List map() を使って配列の値をすべて2倍にする」において、3行目の map() 関数は現在配列 Array のインスタンスメソッド map(_:) になっているので、配列 numbers から呼び出すことになります。

let array1 = map(numbers, {(let v: Int) -> Int in    // Cannot find 'map' in scope

let array1 = numbers.map({(let v: Int) -> Int in

また関数の引数は基本的に定数であり、引数定義で let や var などの指定はできず、上記の記述では仮引数 v の引数ラベルを let とすると解釈されますが、クロージャは呼び出し時に引数ラベルを指定できないためエラーとなりますので削除します。

let array1 = numbers.map({(let v: Int) -> Int in    // error: closure cannot have keyword arguments

let array1 = numbers.map({(v: Int) -> Int in

「List 第2引数のクロージャを外に出した書式」において、接尾クロージャでの記述は以下のようになります。

let array2 = numbers.map{(v: Int) -> Int in
    return v * 2
}

「List map() を使って配列の値をすべて小文字する」において、先述の通り3行目の lowercaseString プロパティはインスタンスメソッド lowercased() に改名されています。


・sorted() 関数での比較方法をクロージャで指定する

「List 配列のストリングを abc 順にする」において、先述の通り5行目の uppercaseString はインスタンスメソッド uppercased() に改名されています。

2つ目の「List 配列のストリングを abc 順にする」において、3行目のインスタンスメソッド sorted(by:) の呼び出しで、接尾クロージャを用いない場合は引数ラベル by: の省略はできません。

let sortedStringArray = stringArray.sorted(by: {(s1: String, s2: String) -> Bool in


・クロージャを受け取る関数を作る

「List 辞書の値をクロージャで加工する dicMap() 関数の定義」において、1行目の第1引数を変数にしようとしていますが、前述の通り引数定義で let や var などの指定はできず、仮引数 dic の引数ラベルを var とすると解釈されますので削除します。

func dicMap(var dic: Dictionary<String, Int>, closure: (String, Int) -> (String, Int))  -> Dictionary<String, Int> {
// 'var' in this position is interpreted as an argument label

func dicMap(dic: Dictionary<String, Int>, closure: (String, Int) -> (String, Int)) -> Dictionary<String, Int> {

これにより8行目の第1引数の辞書 dic への値の更新が(定数のため)できなくなるので、コードブロックの先頭で同名の変数の辞書を定義します。

var dic = dic



2速で歩くヒト/【Swift】小数の丸め処理(round, rounded)のまとめ

Qiita/SwiftのFloat系の演算で余り演算子(%)が廃止、それに変わるメソッドはだるま落としと最寄駅

ソーテック社/詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応 サポートページ

詳細! SwiftUI iPhoneアプリ開発入門ノート[2020] iOS 14+Xcode 12対応


詳細!Swift iPhoneアプリ開発 入門ノート(3)〜PART 3 ストリングとコレクション

2021. 03. 19
この記事は「詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応(初版第1刷)を元に、Xcode 12.4(Swift 5.3.2)下における差異や覚書を記述しています。

手元にあって未読だったものを今頃読んでいるだけですので「詳細! SwiftUI iPhoneアプリ開発入門ノート[2020] iOS 14+Xcode 12対応
2020年12月5日発売の最新版)」なら、この記事を読む必要も無駄な苦労をすることもないため、最新版の購入をお勧めします。



PART 3 ストリングとコレクション



●Chapter 3-1 ストリング String


・ストリング String

「List 同じ文字を繰り返したストリングを作る」において、Swift 3 から同じ要素を繰り返すイニシャライザ init(count:repeatedValue:) は init(repeating:count:) に改名されました。
(「Qiita/Swiftで同じ値を繰り返す文字列、配列」、「詳解Swift改訂版(05)〜基本的なデータ型/CHAPTER 05 基本的なデータ型/5.3 文字列と文字/String型のイニシャライザ」参照。後者の「詳解Swift改訂版(05)〜基本的なデータ型」で「Character 型および UnicodeScalar 型は指定できなくなり〜」とありますが、現在は String 型を繰り返す init(repeating:count:) と Character 型を繰り返す init(repeating:count:) の2種類があります。)

let stars = String(count: 10, repeatedValue: Character("★"))    // error: extra argument 'repeatedValue' in call

let stars = String(repeating: Character("★"), count: 10)

「特殊文字」において、「Stack Overflow/swift - Expected hexadecimal code in braces after unicode escape」によると Xcode 6 beta 4 から文字列リテラルで Unicode で表す \x、\u、\U エスケープシーケンスはタイプミスなどのエラーが発生し易いため、\u{} に統合されたようです。

「List ストリングに改行とダブルクォーテーションを入れる」において、「ソーテック社/詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応 サポートページ」の「1刷正誤表」にあるように1行目の ViewController.swift は不要です。

「List ストリングの文字数」において、2行目の countElements() はSwift 1.2 で廃止されており、現在は String 型のインスタンスプロパティ count を使用します。
(「詳解Swift(5)〜基本的なデータ型/CHAPTER 05 基本的なデータ型/5.2 文字列と文字/文字列の長さとNSStringへの変換」参照)

let num = countElements(str)    // error: cannot find 'countElements' in scope

let num = str.count


・ストリングの比較

「List 小文字に変換して比較する」において、現在 lowercaseString プロパティは無く、文字列を小文字にするにはインスタンスメソッド lowercased() を使用します。

}else if (str.lowercaseString == "swift") {    // error: value of type 'String' has no member 'lowercaseString'

}else if str.lowercased() == "swift" {


・ストリングと数値を変換する

「List ストリングを数値に変換して計算する」において、toInt() メソッドは Xcode 7.0 で Int 型の失敗のあるイニシャライザ init(_:) に改名されています。
(「詳解Swift(4)〜オプショナル/CHAPTER 04 オプショナル/4.1 オプショナル型/オプショナル型とnil」参照)

let kingaku = kakaku.toInt()! * kosu.toInt()!    // error: value of type 'String' has no member 'toInt'

let kingaku = Int(kakaku)! * Int(kosu)!

「List ストリングを浮動小数点に変換して計算する」において、(String 型文字列を NSString 型にキャストせずとも)Float 型も Int 型と同様に失敗のあるイニシャライザ init(_:) で文字列を変換することができます。

let ensyu: Float = Float(2 * r) * (pai as NSString).floatValue

let ensyu: Float = Float(2 * r) * Float(pai)!


・ストリングインデックス String.Index

「List Range と Index で指定するストリングを取り出す」において、「ソーテック社/詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応 サポートページ」の「1刷正誤表」にあるように1行目の ViewController.swift は不要です。

4行目の(Objective-C の NSString クラスのインスタンスメソッド) rangeOfString() は現在利用できないようなので、代わりに Foundation フレームワークが提供している StringProtocol プロトコルのインスタンスメソッド range(of:options:range:locale:) を使用します。
(「ニートに憧れるプログラム日記/【Swift4】文字列(NSString)の置換・分割・検索(完全一致、前方一致、後方一致、部分一致)まとめ【Objective-C】」、「詳解 Swift 第5版/CHAPTER 06/6.3 文字列と文字/Foundation フレームワークの機能」参照)

let range: Range? = str.rangeOfString(word)    // error: value of type 'String' has no member 'rangeOfString'

let range: Range? = str.range(of: word)    // {{_rawBits 393217}, {_rawBits 983041}}
type(of: range)    // Optional<Range<String.Index>>.Type

7、8行目の startIndex、endIndex プロパティについて、上記の通り定数 range はオプショナル Range<String.Index> 型ですので if-let 文で得た定数 thrRange に適用しようとしているインスタンスプロパティは Range 型の startIndexendIndex になりますが、Range 型は Strideable プロトコルおよび SignedInteger プロトコルに準拠していないためエラーが出ます。

また定数 range の示す範囲は定数 str の文字列に固有のものなので、String 型の str における範囲 range(theRange)のインスタンスプロパティ startIndexendIndex を得るように変更します。

let start: String.Index = theRange.startIndex
// error: property 'startIndex' requires that 'String.Index' conform to 'Strideable'
// error: property 'startIndex' requires that 'String.Index.Stride' conform to 'SignedInteger'

let end: String.Index = theRange.endIndex
// error: property 'endIndex' requires that 'String.Index' conform to 'Strideable'
// error: property 'endIndex' requires that 'String.Index.Stride' conform to 'SignedInteger'


let start: String.Index = str[theRange].startIndex    // Index(_rawBits: 393217)
let end: String.Index = str[theRange].endIndex    // Index(_rawBits: 983041)

10行目において、上記の通り定数 range はオプショナル Range<String.Index> 型ですので、中身をそのまま標準出力しても理解できる値は得られません。

print("rangeの\(range!)は\(str[theRange])")    // rangeのIndex(_rawBits: 393217)..<Index(_rawBits: 983041)はうえお

11、12行目において、String.Index 型である定数 start および end に関しては、インスタンスメソッド utf16Offset(in:) によってインデックスを整数値で得ることができます。

print("startの\(start)番は\(str[start])")    // startのIndex(_rawBits: 393217)番はう
print("endの\(end)番は\(str[end])")    // endのIndex(_rawBits: 983041)番はカ

let startIndex = start.utf16Offset(in: str)
let endIndex = end.utf16Offset(in: str)

print("startの\(startIndex)番は\(str[start])")    // startの2番はう
print("endの\(endIndex)番は\(str[end])")    // endの5番はカ

「List ストリングを取り出す範囲を作る」において、2、3行目の advance() 関数は廃止され、代わりにインスタンスメソッド index(_:offsetBy:) を使用します。
(「詳解Swift改訂版(05)〜基本的なデータ型/CHAPTER 05 基本的なデータ型/5.3 文字列と文字/指定位置の文字および部分文字列の取り出し方」参照)

let start = advance(str.startIndex, 4)    // error: cannot find 'advance' in scope
let end = advance(start, 3)    // error: cannot find 'advance' in scope

let start = str.index(str.startIndex, offsetBy: 4)
let end = str.index(start, offsetBy: 3)


・NSString に変換して部分文字列を抜き出す

「List NSString 型にキャストして部分文字列を取り出す」において、2、3、5行目の substring〜Index() メソッドはそれぞれ改名されています。

let toIndex = (str as NSString).substringToIndex(4)    // error: 'substringToIndex' has been renamed to 'substring(to:)'
let fromIndex = (str as NSString).substringFromIndex(5)    // error: 'substringFromIndex' has been renamed to 'substring(from:)'
let withRange = (str as NSString).substringWithRange(range)    // error: 'substringWithRange' has been renamed to 'substring(with:)'

let toIndex = (str as NSString).substring(to: 4)
let fromIndex = (str as NSString).substring(from: 5)
let withRange = (str as NSString).substring(with: range)

しかしいつまでも NSString 型を使うわけにもいかないので String 型に書き換えます。

NSString 型の各インスタンスメソッドは以下のような内容です。
substringToIndex:(先頭から指定したインデックスまでの文字列を返す)
substringFromIndex:(指定したインデックスから末尾までの文字列を返す)
substringWithRange:(指定した範囲の文字列を返す)

String 型のインスタンスメソッドでは、substringToIndex: は prefix(_:)、substringFromIndex: は dropFirst(_:) に置き換えられますが、指定範囲の部分文字列をメソッドはありませんので独自に関数を作る必要があります。

詳解 Swift 第5版/CHAPTER 06 基本的なデータ型/6.3 文字列と文字/指定位置の文字および部分文字列の取り出し方」の「List6-5 部分文字列を取り出す関数(P.157)」が func mySubstring(_ s: String, from f: Int, length n: Int) -> String? というもので、ちょうど文字列から開始位置と長さを整数で指定して取り出す関数なので、そのまま使えます。

let toIndex_ = str.prefix(4)    // あいうえ
let fromIndex_ = str.dropFirst(5)    // カキクケコ
let withRange_ = mySubstring(str, from: 3, length: 5)    // えおカキク
type(of: toIndex_)    // Substring.Type
type(of: fromIndex_)    // Substring.Type
type(of: withRange_)    // Optional<String>.Type

ただし prefix(_:) と dropFirst(_:) メソッドの返り値は Substring 型なので String 型へのキャスト、mySubstring(_:from:length:) 関数の返り値はオプショナル String 型なので開示が必要になります。


・すべての文字を順に取り出す

「List for-in ループで1文字ずつ取り出す」において、「ソーテック社/詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応 サポートページ」の「1刷正誤表」にあるように4行目の定数 char は Character 型になるので String 型にキャストする必要があります。

message += (char + "♡")
// error: cannot convert value of type 'String.Element' (aka 'Character') to expected argument type 'String'

message += String(char) + "♡"


・ストリングを検索する

「List 「県」の文字の前後でストリングを分ける」において、2行目の find() 関数は現在使えないので代わりにインスタンスメソッド firstIndex(of:) を使用します。

let findIndex = find(str, "県")    // error: cannot find 'find' in scope

let findIndex = str.firstIndex(of: "県")

8行目の successor() メソッドも使えないので代わりにインスタンスメソッド index(after:) を使用します。

var start2 = findIndex?.successor()    // error: value of type 'String.Index' has no member 'successor'

let start2 = str.index(after: findIndex!)

index(after:) メソッドの返り値は(オプショナルではない)String.Index 型なので、10行目での start2 の開示が不要になります。

let address2 = str[start2! ..< end2]

let address2 = str[start2 ..< end2]

なお特定の文字で文字列を分割するにはインスタンスメソッド split(separator:maxSplits:omittingEmptySubsequences:) を使う方法もあります。

let splitStr = str.split(separator: "県")    // 「県」を区切り文字として分割し配列に格納
if str.contains("県") {    // 元の文字列に「県」が含まれているかを判定
    let address1 = String(splitStr[0]) + "県"    // 区切り文字「県」を追加
    let address2 = String(splitStr[1])
    print("address1: \(address1)")
    print("address2: \(address2)")
}else {
    print("not found")
}

この場合「県」は区切り文字として扱われるため、分割後の配列 splitStr に格納されている文字列には「県」が含まれません。

格納される配列も部分文字列である Substring 型なので String 型にキャストする必要があります。

また元の文字列に区切り文字が含まれていない場合、返り値 splitStr は nil や空配列では無く、元の文字列を要素とした Substring 型配列となります。

したがって区切り文字が含まれているかの判定にはインスタンスメソッド contains(_:) を使用しています。


・ストリングの挿入と削除

「List ストリングに文字を追加、挿入する」において、「ソーテック社/詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応 サポートページ」の「1刷正誤表」にあるように1行目の ViewController.swift は不要です。

また4行目の appendString(_:) メソッドおよび6行目の insertString(_:atIndex:) メソッドは、現在 append(_:) メソッドおよび insert(_:at:) メソッドに改名されています。

abc.appendString("123")    // error: 'appendString' has been renamed to 'append(_:)'
abc.insertString("あいうえお", atIndex: 3)    // error: 'insertString(_:atIndex:)' has been renamed to 'insert(_:at:)'

abc.append("123")
abc.insert("あいうえお", at: 3)

しかしいつまでも NSMutableString 型を使うわけにもいかないので、String 型のインスタンスメソッド append(_:)insert(contentsOf:at:) に書き換えます。

var abc = "ABCDE"
abc.append("123")
let abcIndex = abc.index(abc.startIndex, offsetBy: 3)
abc.insert(contentsOf: "あいうえお", at: abcIndex)

ただ insert(contentsOf:at:) メソッドの挿入位置は整数では無く String.Index 型で指定しなければならないので注意してください。

「List 2文字目から4文字を削除する」においても同様で、deleteCharactersInRange() メソッドは deleteCharacters(in:) メソッドに改名されていますが、

str.deleteCharactersInRange(delRange)    // error: 'deleteCharactersInRange' has been renamed to 'deleteCharacters(in:)'

str.deleteCharacters(in: delRange)

String 型のインスタンスメソッド removeSubrange(_:) に書き換えると以下のようになります。

var str = "ABCDE12345"
let rangeStart = str.index(str.startIndex, offsetBy: 1)
let rangeEnd = str.index(rangeStart, offsetBy: 4)
let delRange = rangeStart ..< rangeEnd
str.removeSubrange(delRange)

こちらの removeSubrange(_:) メソッドも範囲は String.Index 型で指定しなければならないので注意してください。



●Chapter 3-2 配列 Array


・値の型を限定した配列を作る

「書式 値の型を指定した配列の宣言」において、「ソーテック社/詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応 サポートページ」の「2刷正誤表」にあるように「配列名」と「[値の型]」との間の「:」が抜けています。

「List 値の型を指定した配列の例」において、5行目で複数の型が混在した配列の型指定を AnyObject としていますが、AnyObject 型は任意のクラスのインスタンスを表す型であり、任意の値を表すには Any 型を指定します。
(「詳解 Swift 第5版/APPENDIX A Swift の標準ライブラリ/A.2 型/A.2.1 特殊な型」参照)

var anyValues: [AnyObject] = [1, 2, 3, "a", "b", 0.98]    // error: type of expression is ambiguous without more context

var anyValues: [Any] = [1, 2, 3, "a", "b", 0.98]


・配列を同じ値で初期化する

「List 配列の値を同じ値で埋めて初期化する」において、イニシャライザ init(count:repeatedValue:) は現在 init(repeating:count:) に改名されています。

var zeroList = [Double](count: 10, repeatedValue: 0.0)
// error: extra argument 'repeatedValue' in call
// error: missing argument for parameter 'repeating' in call

var xList = [String](counnt: 5, repeatedValue: "未設定")
// error: extra argument 'repeatedValue' in call
// error: missing argument for parameter 'repeating' in call


var zeroList = [Double](repeating: 0.0, count: 10)
var xList = [String](repeating: "未設定", count: 5)


・配列に値を追加・挿入する

「List 配列の途中に値を挿入する」において、インスタンスメソッド insert(_:atIndex) は現在 insert(_:at:) に改名されています。

aList.insert("XYZ", atIndex: 2)    // error: incorrect argument label in call (have '_:atIndex:', expected '_:at:')

aList.insert("XYZ", at: 2)


・値を削除する

「List 配列からインデックス番号2の値を取り除く」において、インスタンスメソッド removeAtIndex() は現在 remove(at:) に改名されています。

var delColor = colorArray.removeAtIndex(2)    // error: value of type '[String]' has no member 'removeAtIndex'

var delColor = colorArray.remove(at: 2)

「すべての値を削除する」において、インスタンスメソッド removeAll(keepCapacity:) は現在 removeAll(keepingCapacity:) に改名されています。


・配列の値にアクセスする

「List 配列の値を入れ替える」において、1行目で複数の型が混在した配列 theArray の型指定を AnyObject としていますが、前述の通り AnyObject 型は任意のクラスのインスタンスを表す型なので、任意の値を表すには Any 型を指定します。

var theArray: [AnyObject] = ["a", "b", "c", "d", "e", 11, 12, 13, 14]    // error: type of expression is ambiguous without more context

var theArray: [Any] = ["a", "b", "c", "d", "e", 11, 12, 13, 14]

「List 配列からインデックス番号と値を取り出す」において、関数 enumerate() は現在インスタンスメソッド enumerated() に改名されています。

for (index, value) in enumerate(colorList) {    // error: cannot find 'enumerate' in scope

for (index, value) in colorList.enumerated() {


・値を逆順に並べる

「List 値を逆順にした配列を作る」において、要素を逆順にした新しい配列を返すインスタンスメソッド reverse() は現在 reversed() に改名されています。

var startList = rankList.reverse()    // error: cannot use mutating member on immutable value: 'rankList' is a 'let' constant

var startList = rankList.reversed()
// startList ReversedCollection<Array<String>>(_base: ["D201", "F211", "D205", "D149", "E442"])

ただし返り値の型は [T] 型ではなくReversedCollection[T] 型になるので、必要に応じてキャストしなければなりません。

var startList_ = [String](startList)
type(of: startList_)    // Array<String>.Type
print(startList_)    // ["E442", "D149", "D205", "F211", "D201"]

なおインスタンスメソッド reverse() は元の配列の要素を逆順に並べ替える別のメソッドとなっており、定数には適用できないので注意が必要です。

startList_.reverse()
print(startList_)    // ["D201", "F211", "D205", "D149", "E442"]


・値をソートする sort()、sorted()

「List 配列の値を小さい順に並べる」において、3行目のインスタンスメソッドは接尾クロージャで引数リストが省略されていますが、呼び出しているのは sort(by:) です。

また単に要素を昇順に並べるのであればインスタンスメソッド sort() でも済みます。

ageArray.sort {$0 < $1}    // sort(by:) メソッドを接尾クロージャで記述している
ageArray.sort()    // 上と同義

「List 配列のストリングをabc順にする」において、5行目の uppercaseString はインスタンスメソッド uppercased() に改名されています。

$0.uppercaseString < $1.uppercaseString    // error: value of type 'String' has no member 'uppercaseString'

$0.uppercased() < $1.uppercased()


・値を抽出する filter()

「List 30以上の値を抽出して配列を作る」において、インスタンスメソッド filter(_:) は現在 Beta 版として提供されています。

したがって2つ目の「List 30以上の値を抽出して配列を作る」の2行目の記述は以下のようになります。

let age30to39 = filter(ageArray, {(age: Int) -> Bool in    // error: cannot find 'filter' in scope

let age30to39 = ageArray.filter({(age: Int) -> Bool in



●Chapter 3-3 辞書 Dictionary


・値の型を限定した辞書を作る

「書式 値の型を指定した辞書の宣言」において、「ソーテック社/詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応 サポートページ」の「2刷正誤表」にあるように「辞書名」と「[キーの型 : 値の型]」との間の「:」が抜けています。

「List 値の型を指定した辞書」において、5行目で複数の値型が混在した辞書 theUser の値型指定を AnyObject としていますが、前述の通り AnyObject 型は任意のクラスのインスタンスを表す型なので、任意の値を表すには Any 型を指定します。

var theUser: [String:AnyObject]    // error: type of expression is ambiguous without more context

var theUser: [String:Any]


・空の辞書

「型を指定しない辞書を作るには、型を Any または AnyObject にします。」とありますが、上記の通りクラスのインスタンスなら AnyObject 型、値は Any 型になります。

ただし Any 型では型推論によるチェックが機能しないため、それ以外の方法がない限り乱用しない方が良いでしょう。

また「型を指定せずに空の辞書を作ると、Dictionary クラスではなく NSDictionary クラスの辞書になります。」とありますが、現在は型指定無しに空の辞書を作ることはできません。

let test1: [:] = [:]    // error: expected element type, error: expected dictionary value type
let test2 = [:]()    // error: cannot call value of non-function type '[AnyHashable : Any]'


・要素を削除する

「List 指定したキーの要素を削除する」において、3行目の removeValueForKey() は現在インスタンスメソッド removeValue(forKey:) に改名されています。

if let result = theRace.removeValueForKey(theKey) {    // error: value of type '[String : Int]' has no member 'removeValueForKey'

if let result = theRace.removeValue(forKey: theKey) {



Qiita/Swiftで同じ値を繰り返す文字列、配列

Stack Overflow/swift - Expected hexadecimal code in braces after unicode escape

ニートに憧れるプログラム日記/【Swift4】文字列(NSString)の置換・分割・検索(完全一致、前方一致、後方一致、部分一致)まとめ【Objective-C】

ソーテック社/詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応 サポートページ

詳細! SwiftUI iPhoneアプリ開発入門ノート[2020] iOS 14+Xcode 12対応




Calendar
05 | 2023/06 | 07
Sun Mon Tue Wed Thu Fri Sat
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
Recent Articles
Wish List
Apple Music


詳細!Swift iPhoneアプリ開発 入門ノート
絶対に挫折しない iPhoneアプリ開発「超」入門
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(1)〜Chapter 01
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(2)〜Chapter 02
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(3)〜Chapter 03
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(4)〜Chapter 04
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(5)〜Chapter 05
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(6)〜Chapter 06
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(7)〜Chapter 07
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(8)〜Chapter 08
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(9)〜Chapter 09
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(10)〜Chapter 10
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(11)〜Chapter 11
絶対に挫折しない iPhoneアプリ開発「超」入門 第5版(12)〜Chapter 12

絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(1)〜Chapter 02
絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(2)〜Chapter 03
絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(3)〜Chapter 04
絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(4)〜Chapter 05
絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(5)〜Chapter 06
絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(6)〜Chapter 07
絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(7)〜Chapter 08
絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(8)〜Chapter 09
絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(9)〜Chapter 10
絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(10)〜Chapter 11
絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(11)〜Chapter 12
絶対に挫折しない iPhoneアプリ開発「超」入門 第1版(12)〜Appendix
詳解Swift
詳解Swift第5版(01)〜Swiftでプログラミング
詳解Swift第5版(02)〜関数
詳解Swift第5版(03)〜構造体
詳解Swift第5版(04)〜オプショナル
詳解Swift第5版(05)〜プロトコル
詳解Swift第5版(06)〜基本的なデータ型
詳解Swift第5版(07)〜パターン
詳解Swift第5版(08)〜クラスと継承
詳解Swift第5版(09)〜メモリ管理
詳解Swift第5版(10)〜拡張
詳解Swift第5版(11)〜エラー処理
詳解Swift第5版(12)〜クロージャ
詳解Swift第5版(13)〜ジェネリクス
詳解Swift第5版(14)〜メモリへのアクセスとポインタ
詳解Swift第5版(15)〜カスタム属性とDSL記法
詳解Swift第5版(16)〜GUI との連携

詳解Swift第4版(01)〜Swiftでプログラミング
詳解Swift第4版(02)〜関数
詳解Swift第4版(03)〜構造体
詳解Swift第4版(06)〜基本的なデータ型
詳解Swift第4版(07)〜パターン
詳解Swift第4版(08)〜クラスと継承
詳解Swift第4版(09)〜メモリ管理
詳解Swift第4版(10)〜拡張
詳解Swift第4版(11)〜エラー処理
詳解Swift第4版(12)〜クロージャ
詳解Swift第4版(13)〜ジェネリクス

詳解Swift第3版(01)〜Swiftでプログラミング
詳解Swift第3版(02)〜関数
詳解Swift第3版(03)〜構造体
詳解Swift第3版(05)〜基本的なデータ型
詳解Swift第3版(06)〜パターン
詳解Swift第3版(07)〜演算子
詳解Swift第3版(08)〜クラスと継承
詳解Swift第3版(09)〜メモリ管理
詳解Swift第3版(10)〜プロトコル
詳解Swift第3版(11)〜拡張
詳解Swift第3版(12)〜エラー処理
詳解Swift第3版(13)〜クロージャ
詳解Swift第3版(14)〜ジェネリクス

詳解Swift改訂版(01)〜Swiftでプログラミング
詳解Swift改訂版(02)〜関数
詳解Swift改訂版(03)〜構造体
詳解Swift改訂版(04)〜オプショナル
詳解Swift改訂版(05)〜基本的なデータ型
詳解Swift改訂版(06)〜パターン
詳解Swift改訂版(07)〜演算子
詳解Swift改訂版(08)〜クラスと継承
詳解Swift改訂版(09)〜メモリ管理
詳解Swift改訂版(10)〜プロトコル
詳解Swift改訂版(11)〜拡張
詳解Swift改訂版(12)〜エラー処理
詳解Swift改訂版(13)〜クロージャ
詳解Swift改訂版(14)〜ジェネリクス

詳解Swift(1)〜Swiftでプログラミング
詳解Swift(2)〜関数
詳解Swift(3)〜構造体
詳解Swift(4)〜オプショナル
詳解Swift(5)〜基本的なデータ型
詳解Swift(6)〜パターン
詳解Swift(7)〜演算子
詳解Swift(8)〜クラスと継承
詳解Swift(9)〜メモリ管理
詳解Swift(10)〜プロトコル
詳解Swift(11)〜拡張
詳解Swift(12)〜クロージャ
詳解Swift(13)〜ジェネリクス
詳解Swift(14)〜C/Objective-Cとのデータ受け渡し
Swift
Tips
WACOM


Categories
ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
Amazon


Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
QR Code
QR
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Visitors