#【経緯】
社内もくもく会にてSwiftが始まったので復習がてら。
#【Swiftとは?】
Objective-Cの後を継ぐAppleのiOSで利用できるプログラミング言語。
世間の評判を見ると批判が多いObjective-Cくんですが、個人的にC言語ベースだしObjective-C++があるので言うほど嫌いじゃないです。
(メモリ管理出来る言語が好きなだけ感はある)
初めての言語としてC++とObjective-Cを並行して学んだせいで学生時代はトラウマでしたが!
Swiftは今流行りの言語よりなので、型推論があったり表記がObjective-Cより取っつきやすいイメージです。
#【基礎構文】
■定数宣言
let name : String = "Qiita"
let age : Int = 10
■変数宣言
var name : String = "Qiita"
var age : Int = 10
■演算
var x = 10
x = x + 10
/* もしくは */
x += 10
var x = 10
x = x - 10
/* もしくは */
x -= 10
var x = 10
x = x * 10
/* もしくは */
x *= 10
var x = 10
x = x / 10
/* もしくは */
x /= 10
var x = 10
x = x % 10
/* もしくは */
x %= 10
■文字列の連結
let swift : String = "Swift"
let level : String = "入門"
print(swift + level)
Swift入門
■変数展開
let swift : String = "Swift"
print("こんにちは、\(swift)さん")
こんにちは、Swiftさん
■キャスト
パターンとして「① コンバージョンする、② descriptionをつかう、③ asを使う」の三つあるらしい。
① コンバージョンする
String(),Int(),Double()みたいな記載で変換する。
ただしString()はDouble型などの浮動小数点値と文字列の相互変換が無いため期待通りにはならない。
let age : Int = 15
print(String(age) + "歳です")
15歳です
② descriptionを使う
数値→String変換に使うらしい。
でもAppleでは推奨してないっぽい……?
直接参照するのではなく、String(describing:)を使えとのこと。
let age : Double = -15.23
print(age.description)
print(String(describing: age))
-15.23
-15.23
③ asを使う
インスタンスをキャストする場合に使うもの。
as / as ! / as?で使用用途が変わってくる。
記載方法 | 内容 |
---|---|
as | アップキャストなどキャストが成功すると保証される場合 |
as! | 強制ダウンキャスト |
as? | ダウンキャストが成功するか分からない場合(失敗するとnil) |
class Animal {}
class Cat : Animal {}
let cat : Animal = Cat()
let type1 = cat as Animal // OK
let type2 = cat as? Cat // OK (Optional(Cat))
let type3 = cat as! Cat // OK
print(type1)
print(type2)
print(type3)
Main.Cat
Optional(Main.Cat)
Main.Cat
■条件分岐
let showLogPrint : Int = 2
if showLogPrint == 0 {
print("showLogPrint:0")
} else if showLogPrint == 1 {
print("showLogPrint:1")
} else {
print("showLogPrint:2")
}
showLogPrint:2
【所感】
前にアプリ一本作ったことはあるし、PythonやらKotlinやらで流行りの言語を多少書いていたおかげか、久しぶりに触っても特に抵抗感が無かったことに安心。やっかいなのは言語仕様よりiOSの仕様かと思います。
【参考】
・https://qiita.com/nitaking/items/3f0a7b8e7f7223a1c62a
・https://qiita.com/hiroo0529/items/27ec2c24327a692aa0dd
・https://qiita.com/MashMorgan/items/771f8143470b80bd9996
・https://qiita.com/aki/items/50fbab1a4c0df3f3d23f