HOME > Typealiasをどうやって活用するのか
Typealiasって言葉、なんだややこしく見て見ないふりをしていましたが、 先日別の記事を書いた際にTypealiasの記述がありましたので、あらためて確認してみようと思います。まずaliasですが、 Macでショートカットを作成した時に記載される「エイリアス」です。ショートカットのようなものですので、 Typeのショートカット的な感覚で調査進めてまいります。
参考:堅牢で使いやすいAPIクライアントをSwiftで実装したい
参考:Type Aliases — http://SwiftDoc.org
参考:Swift typealias to the rescue — Swift Programming — Medium
参考:Life-LOG OtherSide:Swiftで遊ぼう! - 37 typealiasを考える
参考URLをざっと読んでいると既に混乱してきました。クラス内の関数の返り値や引数なんかに 汎用的に利用すればよいのかな?いろいろ使い方がありそうですので、ひとつずつやってみます。
まず、普通にViewController.swiftにtypealiasを記載できるのか?をやってみます。
こんなサンプルがあったので利用します
typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min
が、、、、、うーん、例がなんともわかりずらいので、Swiftサラリーマンの名称で。よく使うStringをaliasに設定してみます
typealias SwiftSalaryman = String
SwiftSalarymanをString型として利用する。できるのかな
すると、、、、型宣言の箇所でSwiftSalarymanが使えるように!これはなんだか面白いですね。 長いクラス名だったり頻繁に利用するものは短くしたりできるのでしょうか
それでは関数の引数にTypeAliasの有無のコードを比較してみます。(可読性が上がります)
無い時
class FacebookSwiftSalarymanPage {
func getUsers(
success: ((result: AnyObject, operation: String) -> Void),
error: ((error: NSError, operation: String) -> Bool),
finished: (() -> Void)) {
//処理
}
func getUser(user: String,
success: ((result: AnyObject, operation: String) -> Void),
error: ((error: NSError, operation: String) -> Bool),
finished: (() -> Void)) {
//処理
}
}
↑上は通常。Aliasを使わなかった場合。
ある時
class FacebookSwiftSalarymanPage {
typealias SuccessHandler = (result: AnyObject, operation: String) -> Void
typealias ErrorHandler = (error: NSError, operation: String)-> Void
typealias FinishedHandler = ()-> Void
func getUsers(
success: (SuccessHandler),
error: (ErrorHandler),
finished: (FinishedHandler)) {
//処理
}
func getUser(user: String,
success: (SuccessHandler),
error: (ErrorHandler),
finished: (FinishedHandler)) {
//処理
}
}
↑上はAliasを使った場合。わざわざsuccessの箇所を理解しなくて良いので 可読性上がったのではないでしょうか。Aliasは関数も割り当てられるようです
参考:堅牢で使いやすいAPIクライアントをSwiftで実装したい
またよくわからないプロトコルを定義してみました
protocol SwiftSalaryman {
var name: String { get }
var age: String { get }
typealias Response: Any
func getHige(index: Int) -> Response?
}
例えば上記のようなプロトコルがあり、 Typealisaで関数戻り値用の型「Response」にAnyを関連づけした(なんでもOK型)をgetHige関数の戻り値にセット。( どんなヒゲオブジェクトが戻ってくるか不明な関数)。
class Oyagi001: SwiftSalaryman{
let name = "sisheli";
let age = "34";
typealias Response = String
func getHige(index: Int) -> Response? {
var ret:String = "";
return ret;
}
}
上記のキモなのはResponseにどんな型でもいれられるなのではないでしょうか。上はString型なので ピンとしませんが、どんな型をセットすることもできるのであればProtocolとして汎用的に利用できるのかと思います。
さてTypeAliasの嫌〜〜〜な感じ、、、私は少しは減った気がしました。何かお役に立てていれば幸いです。一人で小さいアプリをコツコツつくっているので Protocolとか使う機会ないので大きなプロジェクトしてみたいです。
2021-05-14 14:21:41 | WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。
AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、
昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は... |
2021-05-06 14:04:37 | LINEのアニメーションスタンプ制作の落とし穴、、、失敗談
ゴールデンウィークにLINEスタンプを作成してみました。
作り切って申請も通したんですが、意図したアニメーションと違う、、、、
LINEクリエーターの画面だと、アニメーションのプレビュー... |
2021-05-01 18:05:35 | 久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。
忘れないようにメモ
エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。
ターゲット→ex... |
Tweet | |||
|