エンジニアリング

へたれエンジニアがSwift4ベースの基礎文法をまとめてみた

swift_bg

どーもへたれエンジニアです。ちょっと機会があってSwift言語の初歩を学ぶ機会があったので自分の備忘録を兼ねてまとめておこうと思います。

swift言語とは

Swift(スウィフト)は、アップルのiOSおよびmacOS、Linuxで利用出来るプログラミング言語。Worldwide Developers Conference (WWDC) 2014で発表された。アップル製OS上で動作するアプリケーションの開発に従来から用いられていたObjective-CやObjective-C++、C言語と共存することが意図されている

wikipediaより

少しやってみると、どちらかというと関数型言語的な特徴があったり、モダンな機能を取り込んだ言語仕様の印象(イケメン風の擬人化ができそう)

使い方

とりあえずXcode立ち上げてPlaygroundを立ち上げれば使えるようになる
こやつ裏でコンパイラが走りながら見た目的にはインタタプリタ的に解釈をリアルタイムに見せてくれるイケメン風な感じ・・・・なんです・・・・・・

・・・・・が

ともかく、遅いしたまにコンパイルエラーのまま固まったりと随分ワガママな様子・・・・・・
というまだまだ発展途上のかわいいヤツみたいです

基本構文

Playground > blank から新規作成

とりあえずUIKitをインポートすると重いのでちょっと試す程度ならFoundationに変更する
[js]
//: Playground – noun: a place where people can play

import UIKit ←ここをFoundationに変えておく

var str = “Hello, playground”

[/js]

変数とか定数とか基本構文とか

タプルとかJavaをやっていた身からするとすごい便利な気がする・・・・・!

[js]

import Foundation

//定数(finalと一緒で代入不可)
//基本的に ; をお尻におかない
//let 変数名: 型
let hoge1: Int = 23
//変数
//varを使う
var fuga = 200

//値から型推論できる場合、省略が出来る。原則省略形を基本形とする
//Int推論可能
let score = 2
//型の確認は以下のように行う
String(describing: type(of: score))

//Bool推論可能
let scoreFlag = true
String(describing: type(of: scoreFlag))

//String推論可能
let message = “hello”
String(describing: type(of: message))

//配列
//もちろん let: [Int] numbers = [1, 2, 3, 4, 5] でもOK
let numbers = [1, 2, 3, 4, 5]

//タプル
//Javaで使うDtoっぽい考え方のものこいつを配列化してDtoっぽく使うイメージとのこと
let member: (name: String, age: Int) = (“myname”, 23) ///単体で使うイメージ
//普段使いのシーンはこっち
let members: [(name: String, age: Int)] = [
(“ちりこ”,42),
(“まるこ”,29),
(“あほこ”,33)
]

//基本文法
//if文
if score > 5 {
//こんな感じに変数出力が可能
print(“お前はまぁまぁ出来るやつじゃ\(score)点なら許してやろう”)
} else {
//お前は無能じゃ2点とは反吐がでるわ
print(“お前は無能じゃ\(score)点とは反吐がでるわ”)
}

//for in 文
//※for int i i < hoge i++ 的なJavaっぽい書き方は swift3で廃止されているとのこと var sum = 0 for n in numbers { sum += n } print("for-in文合計は \(sum)です") //もちろんタプルをまわすことも出来る for member in members { print("君の名は\(member.name)、年は\(member.age)のアオハルです") } /* 君の名はちりこ、年は42のアオハルです 君の名はまるこ、年は29のアオハルです 君の名はあほこ、年は33のアオハルです */ //範囲指定したいときはこんな感じで出来る sum = 0 for n in 0...3 { sum += n } print("範囲指定した結果は \(sum)です") [/js]

Swiftさんのイケメンのところは、通常の変数や、定数に nilは代入できないっす! この辺はJavaとかと随分考え方が違うとこなので注意が必要です!(イケメン!)

JavaのMap的なものを、ディクショナリと言うみたいっす。Swiftの特徴としてこの辺の動きがポイントとなりそう。Key-value型になるので、値が取れない場合がある(その場合はnil(JavaとかだとNullですね)となる)。
このような、nilが返ってくる可能性がある場合、返り値がOptional<型>で返ってきます

[js]
//ディクショナリ型の宣言
let prices: [String: Int] = [“本”: 120, “武器”: 20000, “鈍器”: 300000]

//キーの取得
//?を宣言するとOptional型で返ってくる nilかもしれない?みたいな感じで覚えるとよさげ
let bukiPrice: Int? = prices[“武器”] //20000が返ってくる
//型を確認する
String(describing: type(of: bukiPrice)) //Optional
//存在しないキーのパターン
let unkoPrice: Int? = prices[“うんこ”] //nilが返ってくる
//型を確認する
String(describing: type(of: unkoPrice)) //Optional

[/js]

Optionalで返ってくることによって「こいつはアカンやつかもしれない!」ということを予め示してくれるわけですね イケメン!(しつこく)
んで、その値を確認する処理として if-let文 があるわけです こいつをOptional Bindingと言うそうです。格好イイっすね!

[js]

//if-let文で確認 nilの場合はelseの処理が走る
//”旦那、きーがねっすわ”が出力される
if let unkoPrice = unkoPrice {
print(“キーがあったよ”)
} else {
print(“旦那、きーがねっすわ”)
}

//?を宣言しないとコンパイルエラーになる
//let honPrice: Int = prices[“本”] //error: defineSample.playground:96:27: error: value of optional type ‘Int?’ not unwrapped; did you mean to use ‘!’ or ‘?’?

//絶対にnilがない場合は !で上記エラーを許容することが出来る
let honPrice: Int! = prices[“本”]
[/js]

最後に

いったん基本構文だけ書いてみたけど量がだいぶ多くなりますので次回にクラスや関数を書き書きして備忘録化します!