Open7

The Basics

MarinaMarina

数値リテラル

整数リテラルのデフォルトの型はInt型

let a = 123456 // Int型

浮動小数点リテラルのデフォルトの型はDouble型

let a = 1.0 // Double型
MarinaMarina

数値型の種類

浮動小数点型

代表的なものはFloat型とDouble型

ビット数 およそ表すことのできる範囲 値の精度
Float型 32ビット
±10^{38}
最小で6桁の精度
Double型 64ビット
±10^{308}
最小でも15桁の精度
let a: Float = 12345678.9 // 1.234568e+07
let b: Double = 12345678.9 // 12345678.9

Static Property

isInfinite:値が無限大かどうかを表す

let c: Double = 1.0 / 0.0
c.isInfinite // true

isNaN:値がNaN(Not a Number)かどうかを表す

let d: Double = 0.0 / 0.0
c.isNaN // true
MarinaMarina

型エイリアス

定義方法:typealias 新しい型名 = 型名

typealias CLLocationDegrees = Double
MarinaMarina

特殊文字の表現

TODO: Line FeedとCarriage Returnの違い調べる

\n // Line Feed
\r // Carriage Return 
\\ // Backslash
\0 // null文字
MarinaMarina

複数行の文字列リテラル

複数行の文字列リテラル内のインデントは終了の"""の位置が基準になり、終了の"""より浅いか深いかによってリテラルから生成される文字列に反映される。

let f = """
    あいうえお
    かきくけこ
    さしすせそ
    """
// ^この"""が基準となる

例えば下記の場合は実行結果のようになる。

let g = """
    あいうえお
        かきくけこ
    さしすせそ
    """
実行結果
あいうえお
    かきくけこ
さしすせそ
MarinaMarina

Foundation

Swiftの標準ライブラリには高度な操作は用意されておらず、コアライブラリのFoundationで用意されている。

数値型の例

import Foundation

log(1.0) // 0

String型の例

import Foundation

let option = String.CompareOptions.caseInsensitive
let comparedWords = "abc".compare("ABC", options: option)
comparedWords == ComparisonResult.orderedSame // true
MarinaMarina

Unwrapを伴わずにOptionals型の値の変換を行うメソッド

map(_:)メソッド

引数に値を変換するClosureを渡す。

let a = Optional(17)
let b = a.map({ value in value * 3 }) // 51
type (of: b) // Optional<Int>.Type

flatMap(_:)メソッド

map()メソッドと同様に引数に値を変換するClosureを渡すが、Closureの戻り値はOptional<Wrapped>型である。
下記の例ではOptional型の定数に対して更に値を返すか不確かな操作を行なっているため、flatMap()ではなくmap()を用いるとInt??型となってしまう。

flatMap()を用いた場合
let j = Optional("123")
let k = j.flatMap({ value in Int(value) }) // 123
type(of: k) // Optional<Int>.Type
map()を用いた場合
let l = Optional("123")
let m = l.map({ value in Int(value) }) // 123
type(of: m) // Optional<Optional<Int>>.Type