Swiftフレームワーク:「ObjectiveKit」
先日アップした私家版和訳の末尾で言及されていた「ObjectiveKit」。そのGitHubページにあるREADMEの私家版和訳です。
GitHubに登録されてるのは…Swift 3で開発されてます。Deploy先は、iPhone/iPad/macOSとなってます。…ってコード、結構、Xcode11から、物言い(エラー)が点いてますよ? 最新化には、かなり手を入れる必要がありますね。
2020-06-25追記:Forkした上でSwift5化した、私家版「ObjectiveKit」をGitHub上に置きました(Pull-Requestは既に提出済み)。
以下、本文です。
1. ObjectiveKit
ObjectiveKitは、一連の「強力なObjective-Cランタイム関数」セットのための、SwiftフレンドリーなAPIを提供します。
1.1. 使用法
ObjectiveKitを使用するには:
Swiftファイルの先頭で、ObjectiveKitをインポートします:
import ObjectiveKit
次に、修正またはイントロスペクトしたいクラス用に、型付けされたObjectiveClassオブジェクトを作成します:
let viewClass = ObjectiveClass<UIView>()
カスタムSwiftクラスでObjectiveKitを使用する場合は、どこかの時点でNSObjectを継承し、@objcフラグを使用してObjective-Cランタイムに公開していることを確認してください。
1.1.1. イントロスペクション
これらの便利なイントロスペクション・メソッドを使えば、実行時にクラスについてより詳しく知ることができます:
let mapViewClass = ObjectiveClass<MKMapView>()
let ivars = mapViewClass.ivars // ivarの配列
let selectors = mapViewClass.selectors // selectorの配列
let properties = mapViewClass.properties // propertyの配列
let protocols = mapViewClass.protocols // protocolの配列
1.1.2. 実行時にクラス修正
既存のセレクタを、別のクラスからObjectiveClassに、追加します:
let viewClass = ObjectiveClass<UIView>()
viewClass.addSelector(#selector(testSelector),
from: self.classForCoder)
let view = UIView()
view.perform(#selector(testSelector))
クロージャ付き実装を提供することで、カスタムメソッドを追加します:
let viewClass = ObjectiveClass<UIView>()
viewClass.addMethod(closureName,
implementation: {
print("hello world")
})
let view = UIView()
view.performMethod(closureName)
ObjectiveKitは、同じクラス内でのセレクタ交換もサポートしています:
let viewClass = ObjectiveClass<UIView>()
viewClass.exchangeSelector(#selector(UIView.layoutSubviews),
with: #selector(UIView.xxx_layoutSubviews))
1.1.3. 実行時にクラス生成
最後に、実行時にカスタムObjCクラスを作成することもできます:
let runtimeClass = RuntimeClass(superclass: UIView.self)
runtimeClass.addIvar(ivarName, type: .Float)
let runtimeObject = runtimeClass.allocate()
runtimeObject.setValue(4.0, forKey: ivarName)
1.2. セットアップ
1.2.1. CocoaPodsでセットアップ
source 'https://github.com/CocoaPods/Specs.git'
pod 'ObjectiveKit', '~> 0.2'
1.2.2. Carthageでセットアップ
Carthageは、Cocoaアプリケーションにフレームワークを追加するプロセスを自動化する、分散型の依存関係管理ツールです。
下記コマンドで、Homebrewを通して、Carthageをインストールできます:
$ brew update
$ brew install carthage
Carthageを使ってObjectiveKitをXcodeプロジェクトに統合するには、Cartfileで指定します:
github "marmelroy/ObjectiveKit"
1.2.3. インスピレーション