トップ 最新 追記

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|

2014-07-06 [OSX][iOS]はじめましてSwift

SwiftはCocoaフレームワークの為に設計されたプログラミング言語だ。

簡単なクラスの定義と実装は以下のとおり。 


import Cocoa                // 1
 
class Song: NSObject {      // 2
    var title: String       // 3
 
    init(title: String) {   // 4
        self.title = title
    }
 
    func play() {           // 5
        // ... 再生処理
    }
}
1
Cocoaフレームワークを利用する。
2
NSObjectクラスのサブクラスSongの宣言。
3
String型のtitleプロパティの宣言。
4
イニシャライザ
5
メソッドの定義

上記で定義したクラスをインスタンス変数の生成とメソッド呼び出し、プロパティの参照は以下のとおり。


let song = Song(title: "Maybellene")    // 1
song.play()                             // 2
println("\(song.title)")                // 3
1
Songクラスのインスタンス変数を生成。
2
playメソッドを呼び出す。
3
titleプロパティの値を印字。

Swiftではカテゴリを拡張(Extensions)と呼んでいる。

extension String {
    func reverse() -> String {
        var charadterArray: Charater[] = Character[]()
        for haracter in self {
            charadterArray.append(character)
        }
        var reverseString: String = ""
        for var i = characterArray.count - 1; 0 <= i; i-- {
            reverseString += characterArray[i]
        }
        return reverseString
    }
}

Stringクラスにreverseメソッドが追加された事を確認する。

let hello = ""
let reverseString = hello.reverse()
println("\(reverseString)")

プロトコルはプロトコル(Protocols)だ。先ほどのSongクラスのメソッドをプロトコルで宣言するように変更してみよう。

protocol Playable {
    func play()
    func stop()
}
 
class Song: NSObject, Playable {
    var title: String
 
    init(title: String) {
        self.title = title
    }
 
    func play() {
        println("... 再生処理")
    }
 
    func stop() {
        println("... 停止処理")
    }
}

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)

2014-07-07 [OSX][iOS]Swift構文規約

_

改行までは一つの文。C言語であった終端を示すセミコロン(;)は不要。

_ コメント(注釈)

コメントはK&R Cと同様に/*で始め、*/で終わる記法と、C++の//から改行までの両方に対応する。

_ 識別子(名前)

英字と数字、それに加え、一部制限があるがUnicodeに対応しているので日本語も使える。ただし、最初の文字は数字以外でなければならない。

_ キーワード(予約語)

次の識別子はキーワードとして処理系によって予約されている。

class, deinit, enum, extension, func, import, init, let, protocol, static, struct, subscript, typealias, var

break, case, continue, default, do, else, fallthrough, if, in, for, return, switch, where, while

as, dynamicType, is, new, super, self, Self, Type, __COLUMN__, __FILE__, __FUNCTION__, __LINE__

associativity, didSet, get, infix, inout, left, mutating, none, nonmutating, operator, override, postfix, precedence, prefix, right, set, unowned, unowned(safe), unowned(unsafe), weak, willSet

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)
note

2014-07-13 [OSX][iOS]Swiftリテラル

_ 整数リテラル

読みやすさの為に任意の位置に"_"を挿入する事ができる。値としては"_"は無視される。

2進数

let numMax = 0b010011010010
var num = 0b010011010010

8進数

let numMax = 0o2322
var num = 0o2322

10進数

let numMax = 1234
var num = 1234

16進数

let numMax = 0x04D2
var num = 0x04D2

_ 浮動小数点リテラル

読みやすさの為に任意の位置に"_"を挿入する事ができる。値としては"_"は無視される。

let a = 125.0
let b = 1.25e2
 
let c = 0.0125
let d = 1.25e-2
 
let e = 60.0
let f = 0x0Fp2
 
let g = 3.75
let h = 0x0Fp2

_ 文字列リテラル

"文字列"

エスケープ列

NUL文字(\0)
バックスラッシュ(\\)
水平タブ(\t)
改行(\n)
復帰(\r)
2重引用符(\")
単一引用符(\')

文字列に変換

\(式)

16進指定

1バイト文字(\x12)
2バイト文字(\u1234)
4バイト文字(\U12345678)

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)
note

2014-07-21 [OSX][iOS]Swift演算子

代入演算子
代入式に論理演算が含まれているのがC言語と異なる点かな?

= *= /= %= += -= <<= >>= &= ^= |= &&= ||=

算術演算子
オーバーフローを無視する演算子の導入が新しい。

+ - * / % &+ &- &* &/ &% &

前置/後置演算子
インクリメント(++)とデクリメント(--)で、C言語と同様に変数の前に置く場合と、後ろに置く場合で返す値が異なる。

++ --

比較演算子
オブジェクトの比較(===と!==)とパターンマッチ(~=)が新しい。ただし、パターンマッチについては演算子の説明があるが利用方法の説明はない。これは将来の直接的な正規表現の対応の為に予約されているのか?

< <= > >= == != === !== ~=

三項演算子
式1が真なら式2が評価され、偽なら式3が評価される。

式1 ? 式2 : 式3

論理演算子

! && ||

ビット演算子

<< >> & | ^ ~

範囲演算子
新しく導入された演算子だ。Closed Range Operator(A...B)はA以上からB以下の範囲。Half-Closed Range Operator(A..<B)はA以上からB未満の範囲という意味だ。

... ..<

キャスト演算子
新しく導入された演算子だ。isは型チェック。asはキャスト。as?はOptional型へのキャスト。

is as as?

演算子の再定義は別の機会に。

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)
note

トップ 最新 追記