logo サブスレッド

長年Objective-C使いだったおっさんがSwiftを勉強してみて戸惑ったこと

はじめに

金曜担当のしみず(@chaochanprogram)です。どうぞよろしく。
C → C++ → Java → C# → Objective-C のようなC言語を基礎とした言語仕様下の開発をやってきたおっさんがSwiftを勉強してみて戸惑ったことです。
まだガッツリ使っているわけではないので内容少ないですが、書いていきます。

セミコロンがない

厳密にはセミコロンは書かなくても良い。ということです。
書いてもビルドは通りますが、書かないのが作法なようなので書かない方が良さそうです。
自分には違和感あるのですが、これは最近の言語だと無い方が多いのでそれが普通なのかもとも思っています。

if文のあとにカッコがない

これも厳密にはカッコは書かなくても良い。ということです。
いろいろ見る限りでは、一般的にはカッコは書かないみたいです。

if x > 1 {
    x = 1
}

// 書いてもビルドは通る
if (x > 1) {
    x = 1
}

switch文はカッコがないしbreakもない

これもカッコは書かなくても良いし、breakも書かなくても良いということです。
柔軟性があります。

ちなみに case および default で1行も処理を書かないのはエラーになるので
そういう時は明示的に break を書いてやります。

switch x {
    case 1:
        text = "hoge"
    case 2:
        text = "fuga"
    case 3:
        text = "piyo"
        break   // break書いても良い
    default
        break   // なにもしないので明示的に break する
}

他にもswitch文はいろいろできるみたいです。
また次の機会に書きたいと思います。

変数の型はおしりに書く

var x : Int
var text : String = "hoge"

むしろ変数の型は書かなくても良い

初期値を入れる場合は、初期値に合わせた型に解釈されます。

// text は String になる
var text = "hoge"

初期値で解釈された型以外の値を入れるとビルドエラーになります。

var text = "hoge"
text = 1    // text はString型として解釈されているのでエラーになる

でも型を書いた方が良い場合もある

型があいまいな場合は明示的に書いた方が良いでしょう。

// これだと、Int, UInt, NSInteger, NSUIntegerの可能性がある
var x = 0

// なのでこうした方が良い
var x : Int = 0

var と let って?

varが変数、letが定数の宣言時に使います。

var で宣言した変数は代入可能。

var text = "hoge"
text = "fuga"   // OK

let で宣言した変数は代入不可。

let text = "hoge"
text = "fuga"   // ビルドエラー

String と NSString は違う

StringとNSStringは違うクラスみたいです。
SwiftではStringを使えばOKで、Objective-CのライブラリでNSStringのものでも、SwiftからはStringを使えばきちんと解釈してくれます。
基本的には違うクラスということだけ念頭に置いておけば普段は意識せずStringを使えば良さそうです。

おわりに

自宅の作業場所を作るため机と椅子を買ったのですが不良品にあたってしまったため返品しました。
本当は、前回の記事の写真からこんなふうになったよ!的な写真をアップしたかったのですが
まだ全然変わっていないのでアップできません。
新しく別の机と椅子を買ったので、届いたらアップしますよ。

現在の位置:サブスレッド ホーム > 技術ブログ > 長年Objective-C使いだったおっさんがSwiftを勉強してみて戸惑ったこと