サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
tea-leaves.jp
iPhoneでアプリがクラッシュすると、クラッシュログが生成されます。 クラッシュログは、iPhoneの設定アプリ -> 「プライバシー」 -> 「解析」→「解析データ」から取得できます。 中身はこんな感じですね Date/Time: 2017-04-30 19:31:49.0245 -0500 Launch Time: 2017-04-30 19:31:28.9773 -0500 OS Version: iPhone OS 10.3.1 (14E304) Report Version: 104 Exception Type: EXC_CRASH (SIGKILL) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Termination Reason: Nam
先日の「UNIXコマンド これだけは覚えておけ!」に続いて、同じサイトから今回は、findコマンドについての記事の抜粋&意訳&補足です。 findコマンドはUNIXの中でも最も便利なコマンドの1つです。もしあなたがJavaやC++のプログラマで、UNIX環境で作業してるなら、IDEが無くても、ソースファイル中の任意のワードを探すのにfindコマンドが役に立ちます。 !find で、最後に実行したfindコマンドを再実行 findコマンドは引数も含めて長くなりがちです。コマンドの前に!をつけると最後に実行した形式で同じをコマンドを実行することができます。 !find と入力して、再実行しましょう。 1日以内、1時間以内、1分以内に変更したファイルを探す。 -mtime オプションを使うと、ファイルの変更日時を指定して探すことができます。問題が起きたときに、最近どのファイルが変更されたのかを探
サブスクリプトとは、配列やディクショナリの要素にアクセスする時等に使う添字式のことです。Swiftでは、構造体、列挙型、クラスにサブスクリプトによるアクセスを実装することができます。 サブスクリプトによるアクセスを実装するには、次のような内容をクラス等の定義に記述します。 class Hoge { : subscript(index: Int) -> Int { get { // 添字:indexの位置を値を返す } set(newValue) { // newValueを受け取る } } } プロパティの場合と同じように、ゲッター、セッターを記述して、受け取ったindex位置の値を返したり、新たな値を受け取ることができます。 セッターは、特に指定しなければ、newValueで受け取る値を参照できます。上の例のように、引数名を明示的に指定することも可能です。 このクラスのインスタンスに対し
Swiftでは、クラス、構造体、列挙型にプロパティを持たせることができます。プロパティとはこれらの型に関連づけられた属性のことです。 プロパティには、保持型プロパティ(Stored Properties)と計算型プロパティ(Computed Properties)の2種類があります。保持型プロパティは、プロパティ値そのものを値として保持するもので、計算型プロパティは、アクセスされた時に計算した結果を返すものです。 保持型プロパティ 次の例は、クラスに保持型プロパティを持たせたものです。変数、定数どちらでも持たせることができます。 class Person { let name: String // 名前 var age: Int // 年齢 init(name: String, age: Int) { self.name = name self.age = age } } 定数のプロパティ
宣言 Swiftの関数の構文は次のようになります。 // String型とInt型の引数を受け取る関数 func showEncounterMessage(monster: String, count: Int) { print("\(count)匹の\(monster)が現れた!") } showEncounterMessage("スライム", 3) // 関数の呼び出し funcの後に関数名を書き、( と )の間に引数名と型を必要な数だけ指定します。引数が不要な場合でも関数を呼び出す時には()は必要です。 戻り値を返す場合は、)の後に、-> をつけて型を指定します。 // String型とInt型の引数を受け取り、String型を返す関数 func getEncounterMessage(monster: String, count: Int) -> String { return "
継承とは親クラスの属性を引き継いで新たなクラスを作成することです。継承するクラスをサブクラス又は子クラス、継承されるクラスをスーバークラス又は親クラスと呼びます。 また、継承ツリーの起点となるクラスのことをベースクラスと呼びます。 Objective-Cでは、全てのクラスは、NSObject又は、NSObjectをベースクラスとするクラスを継承する必要がありますが、Swiftでは、ユーザ定義のクラスをベースクラスとすることができます。特定のクラスを継承する必要はありません。 サブクラス 別のクラスを継承したサブクラスを作成するには、クラスを定義する時にクラス名の後に:(コロン)をつけて、スーバークラス名を指定します。 /* モンスタークラス */ class Monster { var name: String // 名前 var level: Int // レベル // イニシャライザ
カプセル化を実現する方法としてSwiftには、クラスの他に構造体(struct)が用意されています。但し、クラスと構造体には次のような違いがあります。 構造体では継承は利用できません。 構造体にデイニシャライザは定義できません。 クラスのインスタンスを別の変数に代入すると参照が渡されます。インスタンスの参照数は参照カウントで管理されます。対して構造体を別の変数に代入すると新たなコピーが生成されます。構造体の参照先は常に1つなので参照カウントは使用されません。 構造体の書き方はクラスとよく似ています。 /* 著者 */ struct Author { var name: String = "不明" var birthday: NSDate? // NSDateはCocoaフレームワークの日付型 } let author = Author() イニシャライザを使ってメンバ変数を初期化することも
ディクショナリは、文字列や数値をキーにして値を格納したり参照できる型です。 宣言 ディクショナリは次のように、「[」と「]」の間に「:」(コロン)で区切ったキーと値のペアを「,」(カンマ)区切りで記述して初期化できます。 let party: Dictionary<String, String> = ["ルフィ": "船長", "ゾロ": "剣士", "ナミ":"航海士"] if let job = party["ゾロ"] { print(job) // 剣士 } let items: Dictionary<String, Int> = ["りんご": 100, "みかん": 300, "バナナ": 150] if let price = items["みかん"] { print(price) // 300 } 次のように、「[」と「]」の間に「:」(コロン)で区切ってキーと値の型を指定す
クラスはオブジェクト指向の根幹をなすもので、簡単に言うと変数と関数をまとめたものです。 Swiftでは、クラスは次の様に宣言します。 /* モンスタークラス */ class Monster { var level = 1 // レベル var name: String? // 名前 // 説明 func description() -> String { if name == nil { return "不明 Lv.\(level)" } else { return "\(name!) Lv.\(level)" } } } Swiftのクラス定義はC++やObjective-Cのようにヘッダファイルと実装ファイルを分ける必要はありません。通常は1つのswiftファイルにクラスの定義と実装内容をまとめて記述します。 Swiftのクラス名は、次の様にアッパーキャメルケース(最初の文字とその後
プロトコルとはJavaやC#でいうインターフェースに似たもので、簡単に言うとクラスの挙動を決めた設計図みたいなものになります。クラス自体にも設計図という側面がありますが、クラスがその属性や挙動を細部に渡って記述するのに対して、プロトコルでは外部へのインターフェースのみを定義します。そして実際の挙動はそのプロトコルを採用するクラスで記述することになります。 クラスの利用者から見た場合、そのクラスがあるプロトコルに適合していると宣言されていれば、そのプロトコルで定義されているインターフェースを使えるということが保証されていることになります。 また、Swiftのプロトコルはクラスだけでなく、構造体や列挙型にも採用することもできます。 プロトコルの定義の仕方は、クラスや構造体の場合と似ています。 protocol SomeProtocol { // インターフェースの定義 func someMet
SSLで暗号化しているページにアクセスする場合は、https://~というURLを使いますが、このページにhttp://で始まるリンクが含まれていると、ブラウザによっては警告が表示されます。 例えば、JQueryをCDN(コンテンツを配置している外部のサービス)からリンクする場合、次のような書き方ができますが、 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 同じようにSSLのページでJQueryをリンクする場合は、 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> と、書かないと、IEでページを見た時に以下のような警告が出てしまいます。
イニシャライザはinitという名の特別なメソッドで、構造体とクラスで初期化のために使用します。Objective-Cのイニシャライザは生成したインスタンスを返す必要がありますが、Swiftの場合は何も返しません。 構造体とクラスのイニシャライザの書き方は基本的に同じですが、それぞれで気をつけるところがあるのでそれらについて以下で説明します。 構造体 /* パーソン */ struct Person { var name: String // 名前 var age: Int // 年齢 // イニシャライザ init(name: String, age: Int) { self.name = name self.age = age } } let person = Person(name:"タロウ", age: 18) イニシャライザは上の様に関数と違い、initの前にfuncは不要です。ま
宣言 Swiftの配列には要素の型を指定できます。配列は、"["と"]"の間に型名を挟んで宣言します。また要素を参照するには、インデックス(0〜)を"["と"]"で囲って指定します。 let party: [String] = ["勇者", "戦士", "魔法使い", "僧侶"] print(party[2]) // 魔法使い let hitPoints: [Int] = [140, 210, 85, 52] print(hitPoints[1]) // 210 型は初期値から推測されるので、初期値を与える場合は型を明示する必要はありません。 let party = ["勇者", "戦士", "魔法使い", "僧侶"] let hitPoints = [140, 210, 85, 52] 次の様にして配列の全て同じ値を持った要素で初期化することが出来ます。 var hitPoints =
let message = "He said, \"I\'m going to be a king of pirates!\"" let atmark = "\u{40}" // @ let heart = "\u{2665}" // ♥︎ 文字列の操作 空文字 空文字は以下のようにして定義できます。 var name1 = "" var anme2 = String() また、空文字かどうかは、isEmptyプロパティで判定できます。 if name1.isEmpty { print("名前はまだない") } 長さを調べる 文字列の長さは、countElements関数で調べることができます。 var text = "Swiftの学習" print(countElements(text)) // 8 連結 文字列を連結するには、+または、+=演算子を使います。 let prefix =
ジェネリクスは、Swiftの最も強力な特徴の1つです。ジェネリクスを使うと、あらゆる型に対して柔軟で再利用可能な処理や型を記述することができます。 Swift自体でもジェネリクスは多用されており、例えば配列やディクショナリが型に依存せず同じように値を格納したり取り出したりできるのも、ジェネリクスを使って実装されているからです。 ジェネリクス関数 ここでは例として、Int型の値の大きい方を返す関数を考えてみます。 // Int型の大きい方を返す func bigger(val1: Int, val2: Int) -> Int { return val1 > val2 ? val1 : val2 } println(bigger(10, 20)) // 20 この関数は、Int型の引数に対して大きい方の値を返しますが、Float型やDouble型の引数を渡す様にするとコンパイルエラーになります
Swiftではクラスのインスタンスは、Objective-Cと同様、参照カウンタで管理されています。 インスタンスが初めて生成された時に参照カウントが1になり、以降そのインスタンスへの参照が増えると参照カウントがインクリメントされ、減るとデクリメントされます。そして、参照カウントが0になると、インスタンスも自動的に破棄されます。 ARCは、Automatic Reference Countingの略で、参照カウントの増減を自動的にやってくれる仕組みのことです。 ARCはObjective-Cでも利用でき、ARCの登場以前は、プログラマがインスタンスへの参照が増えるたびに、参照カウントを増やし、参照を減らすたびに、参照カウントを減らすということをプログラムで意識して管理していましたが、ARCによって参照カウントの管理が自動化され、処理の記述漏れによるメモリリークをほとんどのケースで気にせずコ
オプショナル型とは、変数の型がもつ通常の値に加えて、空の(値が無い)状態を保持できる変数です。空の状態はnilで表現します。 Apple社のSwiftの解説では、"optional type"、又は、"optional value"と書かれています。ここではオプショナル型としていますが、公式な呼び方ではありません。 宣言 オプショナル型は、変数の宣言時に、型の後ろに「?」をつけて宣言します。 var name: String? name = nil // オプショナル型でない変数にはnilを代入できない。 var name: String name = nil // エラーになる。 オプショナル型は宣言時に値を代入しない場合は自動的にnilの値が設定されています。そのため宣言時にnilで初期化する必要はありません。 オプショナルバインディング オプショナル型は、次の様にif文の条件で使用す
アクセスコントロールとは、プロパティやメソッドへのアクセスに制限を設けることです。この機能によりオブジェクト指向のカプセル化レベルをより細かく制御することができます。 Swiftのアクセスコントロールは他のオブジェクト指向言語と少し違っているところもあります。プロパティやメソッド、イニシャライザ、サブスクリプトにアクセスレベルを設定できる他、それらが属するクラス、構造体、列挙型自体にも設定できます。アクセス制限はそれらのクラスや構造体の単位ではなく、それらが記述されたソースファイルレベルで設定されます。 設定できるアクセスレベルは次の3つです。 public 最も緩いアクセスレベルです。自身が属するモジュールのソースファイルからだけでなく、別のモジュールのソースファイルからもアクセスできることを許可します。フレームワークのAPIを定義する場合等に使用します。 internal 自身が属する
Swiftとは(Swift 入門) Swiftは、Appleが2014年のWWDCで発表したプログラミング言語です。 それまで、Appleが提供するMacやiPhone等のプラットフォーム向けにネイティブアプリを開発するには、Objective-Cという言語を使って開発しなくてはなりませんでした。Objective-CはC言語を拡張してオブジェクト指向を取り入れた非常に強力な言語ですが、C言語由来の複雑さと、他の言語とは少し毛色の違った独特なスタイルの拡張構文等のためか、特にプログラミング言語の初心者にとっては取っ付きにくく、習得にも比較的時間を要するという側面がありました。 そんな中Swiftは、なんの前触れもなく電撃的に発表されました。コンパイラ言語でありながら、まるでスクリプト言語のような見た目の印象と、実行結果がリアルタイムに可視化される実行環境のデモの様子は多くの人に期待を持って
CoreTextというのは、OSXやiOSで使えるテキスト描画用のフレームワークです。 iOS3.2の頃から使えていたらしいので特に新しいフレームワークというわけではありません。またiOSの場合はUIKitがテキスト描画もいい感じに面倒みてくれるのであまり使う機会もないように思います。 ただし、CoreGraphicsを使って画像を出力する目的でビットマップコンテキストへ日本語を描画しようとすると文字化けしてしまうので、そのような時にはCoreTextを使うと日本語も描画することができます。(画面への描画は日本語もちゃんと出力されます。また単にテキスト画像を生成する目的であれば、iPhoneで利用できるフォントを調べる(その2)で使ったやり方でも日本語の出力が可能(しかも簡単!)ですが、画像や文字を一緒にビットマップコンテキストへ描画する場合は、CoreTextフレームワークを使った方が便
※本記事は、http://www.cocoawithlove.com/2009/05/variable-argument-lists-in-cocoa.html を参考に(というかほぼそのまま意訳)しました。 Objective-CはC言語を拡張した言語なのでC言語と同じように可変引数も扱えます。 一般的に、書式文字列と、nil終端リストによる2つのパターンで可変引数を扱います。 書式文字列による可変引数 C言語のprintf系で使われている書き方で、書式文字列中のプレースホルダーの位置に引数を埋めてやるやり方です。プレースホルダは%で始まる書式指定子で指定します。 以下は、NSStringのstringWithFormathメソッドの例です。 NSString *myString = [NSString stringWithFormat:@"Number %d, String: %@,
今回は久しぶりにWebネタです。 HTTPのページからHTTPSを使ってJavaScriptでサーバと通信するのは特に問題無さそうにも思えますが、普通にAjaxを使おうとしても拒否されてしまいます。 クライアント側(http://〜/test.htmlの一部) <a href="#" id="test">test</a> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script> $(function() { $("#test").click(function() { $.ajax({ type: "POST", url: "https://〜/hello.php", data: "name=taro", success: function(msg) { alert(
NSAttributedStringを使うと文字列を装飾して描画することができます。 使いたい属性をNSDictionaryに設定して、NSAttributedStringのインスタンスを生成することで属性付きの文字列を使うことができます。 後から属性を追加したり変更する場合は、NSMutableAttributedStringの方を使います。 NSAttributedString UIKit Additions Referenceを見るとiPhoneで使える属性として以下のようなものがあるようです。 NSString *const NSFontAttributeName; // フォント名 NSString *const NSParagraphStyleAttributeName; // 段落の書式 NSString *const NSForegroundColorAttributeNa
このページを最初にブックマークしてみませんか?
『tea-leaves.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く