objective-cとswiftの簡単比較表、チート的な移植対応リスト

objective-cとswiftの簡単比較表、チート的な移植対応リスト

Swift(テイラー・スウィフトではない)がアップルの新しいプログラム開発言語として発表されました。(アメリカの歌手、俳優でテイラー・スウィフトさんはほんとにお人形のように美人です。びっくりですね)
まだ全くこのSwiftで開発したことがないので、どれくらい使いやすいのかもわかりません。
しかし、かなり面倒な体系になっていそうで、覚えるのが面倒そうです。
でもPHPのように型の宣言をしなくてもよかったり、文字列の操作が簡単になっているのは非常に喜ばしいことかもしれません(ゲームくらいしか作らないので、文字列の操作はほとんどしないので私は嬉しくありません)。

swiftで作るアイフォンアプリ、タップカウントアプリチュートリアル、初心者向け
http://youtu.be/IMv_eX0DTDc

今後XCODEの開発環境として、Objective-cからSwiftに置き換わるのか、それともSwiftは進歩も発展なく取り残されるだけなのかわかりません。
要は開発者がどちらを望むか、どちらが今後使いやすくなり、コード資産が増えるかということです。結局のところ、使う人が多いほうがバージョンアップされて今後も利用され、ソースコードが公開されていきます。
過去にもC,C++からJAVAに置き換わると言われた(?)時代がありましたが、いまだに、C,C++は利用されています。そして、javascript、C#といった言語も登場してきました。C#はマイクロソフトの統合環境で利用されているだけでなく、Unity
ようなゲームフレームワーク環境でも利用されています。

ただ新しい開発言語だから覚えるのが面倒だと言ってなにもしないままだと取り残されてしまうので、基本的な部分だけでも知っておこうと思います。
また、Swiftのプログラムの書き方を忘れても良いように比較表といいますか、チート的な比較移植リストを作成しておこうと思います。

ちなみにセミコロンは不要だそうです。でもついセミコロンを付けて書いてしまいます。

変数の設定(基本的)

Swift
letという文字が出てきて一体何だ?と思う人が多いことでしょう。varのほうは変数を定義するということがわかります。
問題はletのほうです。英語でいうところのさせるとかlet it be, let it goみたいな英語です。
何を意味するのか? 英語で書かれた数学に関する英文を読んだ人なら、ピンとくるかもしれません。ここでいうletは「仮定する」(変更しない、不変)という意味です。

以下はiBooksにあるThe Swift Programming Languageを参考にしました。

let x=1;//letは英語でいうところの、xを1と仮定するという意味があり定数で、値の変更ができません。固定です。
var y=1;//型を指定せず変数としてyを1とし、後で値の変更が可能です。
var atai:double=70;//型を指定できる
var i,j,k:double;//複数の変数を同じ型にする

関数メソッドの設定

通常objective-cでは、型が先で次に関数名を記述しますが、swiftでは、「func」という文字を書き、関数名の次に型を指定します。つまり、型の宣言が逆になっています。
(なんでこんな変な仕様にするかなと思いましたが、Objective-CとSwiftを混在した時にコンパイラーが間違うことが無い様するためですかね)
しかも複数の変数を返り値にすることができます。これは便利かもしれません。通常は、参照型にして引数として利用しますがこれが煩わしかったりします。
swiftでは、関数を単なるコードをひとくくりにしたものという認識(自分が今までそう思っていただけですが)から、より便利なものとした作りになっています。

//objective-c
-(int) test:(int)iCount{
 return iCount;//セミコロンが必要です。
}
//swift
func test(iCount:Int)->int{
 return iCount;//意味のないサンプルです
 //セミコロンはなくても問題ありません。癖でついつけてしまいます。
}
//swift
func test()->String{//引数が無い場合
 return "hello";//セミコロンはなくても問題ありません。癖でついつけてしまいます。
}

func test(name:String){//返り値がない場合
	println("\(name)");
}

func​ greet​(​name​: String​, ​day​: String​) -> ​String​ {
​    ​return​ ​"Hello ​\(​name​)​, today is ​\(​day​)​."// バックスラッシュと()で囲むことで変数の値を表示します。
​}

​greet​(​"Bob"​, ​"Tuesday"​)//Hello Bob , today is Tuesday .

抜粋:: Apple Inc. “The Swift Programming Language”。 iBooks. https://itun.es/jp/jEUH0.l

//swift
func sayHello(name:String)->String{
 let greeting="Hi, "+name+".";//文字の連結ができます。
 return greeting;
}

//複数の返り値を設定できます。そして、関数の返り値を直接変数に代入して取り出すことも可能

func minMax(array:[Int])->(min:Int,max:Int){
	var currentMin=array[0];
	var currentMax=array[0];
	for value in array[1..<array.count]{//1から開始します
		if value< currentMin{
			currentMin=value;
		}else if value>currentMax{
			currentMax=value;
		}
	}
	return (currentMin,CurrentMax);
}

let bounds=minMax([5,-1,3,6]);
println=("min is \(bounds.min) and max is \(bounds.max)");

//引数にメソッドを用いることもできる。その時の引数の型は、メソッドの引数と同じ
func hasAnyMatches(list:[Int],condition:Int->Bool)->Bool{
	for item in list{
		if condition(item){
			return true;
		}
	}
	return false;

}

func lessThanTen(number:Int)->Bool{
	return number<10;

}

var numbers=[20,10,7];
hasAnyMatches(numbers,lessThanTen);//lessThanTenがこの関数の引数の時に、lessThanTenの引数を与えていなくとも、hasAmyMatches側の中でローカル関数に引数を与えているのでエラーにならない

オブジェクトとクラスの設定

class Shape{
	var numberOfSides=0
	func simpleDescription()->String{
		return "A shape with \(numberOfSides) sides."
	}

}

var shape=Shape()//オブジェクトの生成。new とか付けなくてOK。
shape.numberOfSides=9
var shapeDescription=shape.simpleDescription()


関連記事

「スポンサーリンク」


ツイートツイート
カテゴリー: iPhoneアイフォンアプリ開発 タグ: , パーマリンク