2016年03月24日

Swift: conformProtocol()、respondsToSelector:


Objective-Cでプロトコルに対応しているかどうかを判定するconformProtocol関数や、メソッドを持っているかどうかを調べるrespondsToSelectorのSwiftでの代替について。

ただし、Objective-Cとは違いSwiftでは静的な型の決定を行っているのでほとんどがコンパイル時に決定でき、動的に判定することはない。というかそのような使い方は避けるべきと考えられる。

ここではごく基本的なものを示す。個別の事情によりまた別の判定方法を使った方がよいことがあるので、それらはいつか実際の事例毎にまとめたい。
続きを読む
posted by 永遠製作所 at 00:47| 東京 ☀| Comment(0) | TrackBack(0) | Swift | このブログの読者になる | 更新情報をチェックする

2016年03月22日

Swift: クラスの判定


Objective-Cでクラスを判定してなんらかの処理をする場合を、Swiftで実現するのはどうするのか。例えば、isKindOfClass: とか、isMemberOfClass: とかの処理。

「if ( [object isKindOfClass:[Root class]] )」は、そのオブジェクトが、Rootクラスのインスタンスかまたはそのサブクラスのいずれかのインスタンスであれば真になる。もし、判定後にそのクラスとしてなんらかの操作を行うのであれば、キャストして代入すればよい。「Sub1 *sub = (Sub1*)object;」のようにする。

一方、そのインスタンスそのものである時だけ真にしたい場合には、「isMemberOfClass:」を使う。
続きを読む
ラベル:クラス Swift
posted by 永遠製作所 at 12:12| 東京 ☀| Comment(0) | TrackBack(0) | Swift | このブログの読者になる | 更新情報をチェックする

2016年03月21日

Swift: クラス名を取得する


SwiftのクラスにはObjective-CのNSObjectにあったclassNameプロパティのようなものがないので、文字列でクラス名を取得するには工夫が必要。

Objective-Cのメソッドを使ってNSStringFromClass(String)のようにする。これを実行するにはFoundationをインポートする必要がある。
※Stringは構造体であってクラスではないが、Swiftでは構造体やクラスはタイプという上位概念で包含され様々な点で似た振る舞いをする。

ただし、独自に定義したクラスではランタイムモジュールを含めた修飾が定義したクラス名の前につくのでこれを削除する必要がある。結局、以下のようになる。

import Foundation

func className(type: AnyClass) -> String {
print("AnyClass : ", terminator:"" )
// print( NSStringFromClass(type) ) // "__lldb_expr_198.Root"
return NSStringFromClass(type).componentsSeparatedByString(".").last!
}

class Root { }
className( Root ) // "Root"


単にクラス名を出力するだけであればprint( Root.self )のようにしても"Root"という結果が得られるのだが、これはprintメソッドが内部でクラス名文字列を取り出す処理を行っているだけのようだ。文字列として取り出して使うことはできない。

インスタンスからそのクラス名を取り出すには、同様に出力だけならprint( Root() )でできる。が、ちゃんとするには先ほどのメソッドに Root().dynamicType を渡すとよい。

func className(o: AnyObject) -> String {
print("AnyObject : ", terminator:"" )
return className(o.dynamicType)
}

let root = Root()
className(root)

続きを読む
ラベル:Swift クラス
posted by 永遠製作所 at 01:16| 東京 ☀| Comment(0) | TrackBack(0) | Swift | このブログの読者になる | 更新情報をチェックする

2016年03月18日

Apple TV Tech Talks - 3 Focus-Driven Interface With UIKit

Focus-Driven Interface With UIKit
Apple TV Tech Talks - Session 3 - tvOS
44:39
https://developer.apple.com/videos/play/techtalks-apple-tv/3/

ようやく具体的な実装方法についてのセッション。

tvOS向けアプリケーションではユーザーインタフェースとしてフォーカス指向インタフェースを採用している。これについてはデザインに関するセッションでも紹介された。

このセッションではフォーカス指向インタフェースの基本的な考え方、それを実現するためのフレームワークやクラス、そしてその具体的な実装方法について述べる。後半では、サンプルコードを使って実際に動かして説明しているのでわかりやすい。さらにデバッグ方法としてXcodeなどが備えている機能についても実際にデモしながら説明している。

tvOSで始めて導入されたフォーカス指向インタフェースを使う全てのプログラマが視聴すべきセッション。

なお、使われたサンプルコードは下記からダウンロードできる。

UIKit Catalog for tvOS (Sample Code)
https://developer.apple.com/library/tvos/samplecode/UICatalogFortvOS/Introduction/Intro.html
Build Requirements: Xcode 7.1 and tvOS 9.0 SDK or later
Runtime Requirements: tvOS 9.0 or later
続きを読む
posted by 永遠製作所 at 08:58| 東京 ☀| Comment(0) | TrackBack(0) | WWDC | このブログの読者になる | 更新情報をチェックする

2016年03月10日

Apple TV Tech Talks - 2 Designing for Apple TV

Designing for Apple TV
Apple TV Tech Talks - Session 2 - tvOS
23:40

https://developer.apple.com/videos/play/techtalks-apple-tv/2/

Apple TVのアプリケーションを作成するときにデザイン上の注意点。
テレビのようなエンターテインメント性を重視して、パソコン上のアプリケーションのようなボタン等UI要素を使わない。また少し離れたところから明瞭性が重要。リモコンの操作性も考慮する。

そのために実際に操作画面の例を見せながら解説していてわかりやすい。細部についてはヒューマンインタフェースガイドラインで記述している。

続きを読む
posted by 永遠製作所 at 20:45| 東京 ☁| Comment(0) | TrackBack(0) | WWDC | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。