LoginSignup
10
10

More than 5 years have passed since last update.

Swift Language Guide "The Basics"

Last updated at Posted at 2014-06-07

The Swift Programming LanguageのLanguage Guideの"The Basics"の章をざっとまとめたものです。

Objective-Cを始め、既に他の言語を習得されてる方向けです。
英語は苦手なので、ソースコードから逆読みしている箇所もあります。
間違いや補足等あれば、教えて頂ければ幸いです。

次章 Basic Operators

文末

行末又はセミコロンまでが文。行末のセミコロンは必須ではない.

定数

let 定数名 = 定数値 // 型推論
let 定数名:  = 定数値 // 型明示

定数名の先頭は、小文字でも大文字でもかまわない。

let ZERO = 0
let ONE:Int8 = 1 // 型を明示した場合
let PATH = "a/b/c"

要調査

// クラスの属性定義
let ZERO;

// クラスのコンストラクタか何かで、定数の初期値を設定することは可能?
ZERO = 0;

変数

// 型推論
var 変数名 = 10
// 型明示
var 変数名: 変数型
var name = "hmu29"
name =  "hmu30"

識別子

変数名や定数名には、
- Unicodeが使える。
- 数字から始まってはいけない。

標準出力

グローバル関数printlnを使う。

println("hello world!")
message = "hello world!"
# \(変数名)で文字列中で変数の展開が行える。
println("message = \(message)")

コメント

ブロックコメントはネストも解決してくれるっぽい。

// インラインコメント
/*
 ブロックコメント
 */

/*
 /* これもコメント */
 これもコメント!!
 */

Integer 整数

  • UInt8
  • Int32
  • Int64
  • Int ... 32bit platform=>Int32. 64bit platform=>Int64.
  • UInt32
  • UInt64
  • UInt ... 32bit platform=>Int32. 64bit platform=>Int64.

最大値 最小値

let min = Int32.min
let max = Int32.max

定数値

整数

  • プレフィックス無し... 整数
  • プレフィックス0b ... 2進数
  • 0o ... 8進数
  • 0x ... 16進数

浮動小数点

10進数に対して
Swift
1.25e2 // 1.25 x 10^2 or 125.0
1.25e-2 // 1.25 x 10^2 or 0.0125.

16進数に対して
Swift
- 0xFp2 // 15 x 2^2 or 60.0
- 0xFp-2 // 15 x 2^-2 or 3.75.

桁区切り

_で桁を区切れる.

let million = 3_000_000

Float 浮動小数点

  • Double ... 64bit
  • Float ... 32bit

型セーフ

Swiftは型セーフな言語。(コンパイル時に型チェックを行う)

型推論

Swiftは変数や定数の初期値に応じて型を推論する

let たぶんInt = 10 // 整数値はIntと推論
let pi = 3.14 // 浮動小数点はDoubleと推論

型変換

整数値

変数、定数にその範囲外の値を入れる事はできない。

let val1: Int8 = Int8.max + 1 // コンパイルエラー
let val1: Int8 = Int8.max
var str = "127"
var val2 = str.toInt()
var val3: Int8 = Int8(val2!) // これはOK val3 == 127

// これは例外発生
var val4: Int8 = val1 + Int8(val2!)

浮動小数点->整数

Int()などでキャストできる

let val = Int(3.14)

型エイリアス

いわゆるtypedef.

typealias AudioSample = Unit16

Boolean

型名はBool型
値はtrue 又は false

if などの制御文内の式は、Booleanでないとダメ

let success = true
if success {
 // 必ずここを通る
}

if 1 {
 // 1 はコンパイルエラー
}

if 1 == 1  {
 // 1 == 1 はtrue なのでOK
}

タプル

値の組み合わせを定義できる。
Laungauge guideにも一時的なスコープで利用する場合に便利とある

便利そうだけど、便利過ぎそう。。。
特にタプルの要素に名称を付けるなら、
構造体なりにした方が型的に安全なのでは...と感じる。

let http404Error = (404, "Not Found")

// タプルを展開
let(statusCode, message) = http404Error
println("code=\(statusCode), msg=\(message)")

// タプルの一部のみ展開
// 省略部を_で指定する
let(statusCode, _) = http404Error
println("code=\(statusCode)")

// 0. 1とインデックスでもアクセスできる
println("code=\(http404Error.0), msg=\(http404Error.1)")

// タプルに名称を指定もできる
let http404Error = (statusCode:404, message:"Not Found")
println("code=\(http404Error.statusCode), msg=\(http404Error.message)")

optional (nil許容)

Int型の変数などでnilを許容する場合にInt?型が使われる.

※ C#などでもSQLの実行結果を格納する際にnil許容型があったけど、そんな感じに利用するする?

let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
// toIntはInt?を返す.

// Int?型は、変数の接尾辞が無指定の場合はnilかどうかを表し
if convertedNumber {
  // 変数の接尾辞に!がつくと、その値を参照する.
  // これをForced Unwarppingというらしい.
  println("number=\(convertedNumber!)")
} else {
 println("error!!")
}

変数の型にInt?を指定する事もできる

var result: Int? = 100
result = nil

nil

objective-cとは異なり、nilはポインタではない.オブジェクトが存在しない事を意味しない.

(...オブジェクトが存在しない、という意味のnilは何になったんだろう...)

Implicitly Unwapped Optionals

Int?ではなくInt!を使う事で、変数名!でなく、変数名のみでUnwrapped状態にしてくれる。(文法的にはC++のリファレンスみたいな?)

※ 変数に値が存在する事を前提する場合に、!が省略できて便利...?
 いまのところ使い道が?

var val: Int! = 32
println(val=\(val))

nilチェックも可能


let val: Int? = nil
if val {
  println(true)
} else {
  println(false) // falseが出力される
}

Assert

メソッド処理時のオブジェクトの状態チェックや、引数のチェック、
処理後の状態チェックに使ったりする。

デバッガで実行時には、Assertの結果がfalseになると、そこで処理を止めてくれる。

let age = -3
assert(age >= 0, "error message")

※ Swiftでは未確認だけど、Cの場合、非デバッグ時には、assertは無視されるので、一般的にassert中で、副作用のある処理(変数に値を代入したりなど)を行うのはNG.


次章 Basic Operators

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10