Swiftで計算型プロパティをネストさせてみる
公開日:
:
iPhoneアプリ開発
Swiftの計算型プロパティ(Computed property、コンピューテッドプロパティ)をネストできることを初めて知ったので、サンプルも交えて紹介したいと思います。
単一の計算型プロパティを使って実装する
まず、単一の計算型プロパティを使ってサンプルを書いてみました。
struct Data1 {
var count: Int
var unit: String
var attributedText: NSAttributedString {
let result = NSMutableAttributedString()
let countAttributes = [
NSFontAttributeName : UIFont.systemFontOfSize(24),
NSForegroundColorAttributeName : UIColor.redColor()
]
let countText = NSAttributedString(string: String(count),
attributes: countAttributes)
result.appendAttributedString(countText)
let unitAttributes = [
NSFontAttributeName : UIFont.systemFontOfSize(14),
NSForegroundColorAttributeName : UIColor.blackColor()
]
let unitText = NSAttributedString(string: unit,
attributes: unitAttributes)
result.appendAttributedString(unitText)
return result
}
}
Data1(count: 27, unit: "inch").attributedText
赤い文字と黒い文字を組み合わせたNSAttributedStringを生成する計算型プロパティですが、コードが長く処理の流れが見通しづらくなってしまっています。
複数の計算型プロパティを使って実装する
次に、複数の計算型プロパティを使って実装してみましょう。
struct Data2 {
var count: Int
var unit: String
private var countText: NSAttributedString {
let countAttributes = [
NSFontAttributeName : UIFont.systemFontOfSize(24),
NSForegroundColorAttributeName : UIColor.redColor()
]
return NSAttributedString(string: String(count),
attributes: countAttributes)
}
private var unitText: NSAttributedString {
let unitAttributes = [
NSFontAttributeName : UIFont.systemFontOfSize(14),
NSForegroundColorAttributeName : UIColor.blackColor()
]
return NSAttributedString(string: unit,
attributes: unitAttributes)
}
var attributedText: NSAttributedString {
let result = NSMutableAttributedString()
result.appendAttributedString(countText)
result.appendAttributedString(unitText)
return result
}
}
Data2(count: 27, unit: "inch").attributedText
countTextとunitTextはprivateにしているので外部からは見えませんが、struct内の名前空間を汚してしまう点が微妙だと思います。
計算型プロパティをネストさせる
最後に計算型プロパティをネストさせて実装してみましょう。
func +(text1: NSAttributedString, text2: NSAttributedString) -> NSAttributedString{
let result = NSMutableAttributedString()
result.appendAttributedString(text1)
result.appendAttributedString(text2)
return result
}
struct Data3 {
var count: Int
var unit: String
var attributedText: NSAttributedString {
// Nested computed property 😊
var countText: NSAttributedString {
let countAttributes = [
NSFontAttributeName : UIFont.systemFontOfSize(24),
NSForegroundColorAttributeName : UIColor.redColor()
]
return NSAttributedString(string: String(count),
attributes: countAttributes)
}
// Nested computed property 😊
var unitText: NSAttributedString {
let unitAttributes = [
NSFontAttributeName : UIFont.systemFontOfSize(14),
NSForegroundColorAttributeName : UIColor.blackColor()
]
return NSAttributedString(string: unit,
attributes: unitAttributes)
}
return countText + unitText
}
}
Data3(count: 27, unit: "inch").attributedText
計算型プロパティをネストさせたので、countTextやunitTextがstruct内の名前空間を汚さず、更にattributedText内でのみ使用するという意図も表現できています。
ついでにNSAttributedString同士を連結する+演算子を導入したことで、読みやすいスッキリとしたコードにすることができました。
サンプルはこちら
今回のサンプルコードはGitHubに置いてありますので、ぜひチェックしてみてください。 ⇒ SwiftTips/Contents.swift at master · akio0911/SwiftTips
@akio0911はこう思った。
今回紹介した「計算型プロパティのネスト」は応用範囲が広そうな書き方ですね。
これから書くコードで積極的に活用していきたいなと思ってます。
↓ Swiftの計算型プロパティなどに関する文法は、以下の本が詳しいです。
この記事が気に入ったら「いいね!」しよう
Twitterで更新情報をゲット!
LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)
関連記事
-
-
Swift 2でシングルトンを初期化・呼び出しする方法
Swift 2でシングルトンを実装する方法について解説したいと思います! (※「シングルトンを
-
-
【書籍】iPhoneアプリ開発の初心者にオススメの本「詳細! Swift iPhoneアプリ開発 入門ノート」
Swift 1.1、Xcode 6.1、iOS 8.1に対応している書籍「詳
-
-
【Swift】privateなタイプメソッド作るなら、privateな関数でも良いかもと思った
structとかclassの中で、ちょっとした処理を担当させるprivateなタイプ
-
-
iPhoneアプリの開発に必要なものをまとめてみた
僕はアプリ開発講座を開催していますが、その関係もあって「iPhoneアプリを開発するには、ど
-
-
Swift 2.2の変更点をまとめてみた
2016年3月22日、Xcode 7.3と共にSwift 2.2が正式にリリースされました。
-
-
詳解 Swift 改訂版のKindle版が発売。リフローに対応!
今日気付いたんですが、「詳解 Swift 改訂版」のKindle版がいつの間にか発売されていまし
-
-
iPhoneゲームを簡単に開発したいならこの本がオススメ!「Sprite Kit iPhone 2Dゲームプログラミング」
iPhoneゲームアプリを簡単に開発したいなら「Sprite Kit iPhone 2Dゲームプ
-
-
SwiftTaskで失敗したタスクによって異なるエラー処理を行う方法
SwiftTaskで複数のタスクを.successでチェーンさせ、失敗したタスクによって
-
-
uGUIの使い方が分かる本「uGUIではじめるUnity UIデザインの教科書」
株式会社マイナビ様より献本御礼。 本書は、公式のUIフレームワーク「Unity UI(uGUI
-
-
iPhoneアプリを作りたい開発初心者にまずはやってみて欲しい3つのこと
今日は、これからiPhoneアプリを作りたい開発初心者の方にやってもらいたいことを書いてみた