1.宣言
struct Point {
var x: Double
var y: Double
func norm() -> Double {
return
norm(x * x + y * y)}
}
C言語の構造体とは異なり、メソッドも定義できるようになりました。これでわざわざ第一引数に構造体をとって何かするような関数を大量に生成する必要がなくなりました。
2.初期化
var p = Point(x:1, y:2);
構造体を実際に利用するには、上記のような書き方をします。メンバーの名前とコロンと値をカンマで繋げていく方式です。newなどのキーワードは特にありません。
現状このPoint構造体には、フィールドの初期値が指定されていないため、引数無しでPointを作ろうとするとエラーになります。しかしながら、構造体の宣言の際に、各フィールドに初期値をあたえておけば、引数無しでも初期値を使って構造体を初期化することが可能です。
3.フィールドへのアクセス
フィールドへのアクセスは通常通り、ドット演算子を用いて行います。
println(p.x);
p.x = 10;
構造体が値渡しである証拠に、一度別の変数に代入してしまうと、その後元の変数が書き換えられても、代入先には影響を及ぼしません。
var p = Point(x:1, y:2);
var q = p;
p.x = 10;
println("p.x = \(p.x), q.x = \(q.x)") //p.x = 10.0, q.x = 1.0
4.mutating
構造体の値を書き換える関数を書くときには、mutating修飾子をつける必要があります。
例えば、Point構造体の位置をY軸にそって反転させるflipY関数を例にとります。
func flipY() {
x = -x //この = でエラー
}
このままではエラーが表示され、コンパイルできません。なので、funcの前のmutating修飾子をつけて再度コンパイルをします。
mutating func flipY() {
x = -x
}
総括
- 構造体は値渡し
- 関数も持てる
- 構造体を書き換える関数にはmutating修飾子
- iOS8 で採用されるSwift言語オーバービュー
- Swift言語の入門 (1) 変数編
- Swift言語の入門 (2) 列挙型編
- Swift言語の入門 (3) コレクション編
- Swift言語の入門 (4) パターンマッチ編
- Swift言語の入門 (6) オプション型編
- Swift言語の入門 (7) クラス編
0 件のコメント:
コメントを投稿