環境
課題
開発をしていると、こんな感じでメンバ変数がたっぷりあるclassができます。この例ではclassですが、structも同様ですね。
class SampleClass: Codable { public let id: Int public let title: String public let body: String public let thumbnailUrl: URL public let tags: [String] public let categories: [String] public let createdAt: Date public let updatedAt: Date public let comment: [String] public let isFavorited: Bool public let isBookmarked: Bool public let url: URL }
Swiftのstructではinit
が自動生成されますが、Embedded Frameworkを活用してModelをアプリ外に出しているとその恩恵を受けることができません。Modelを外に出している場合は、Codableに準拠しておくだけで済むことが多いのですが、たまにinit
が必要になります。
さて、このメンバ変数に対応したinit
を書くと、
init(id: Int, title: String, body: String, thumbnailUrl: URL, tags: [String], categories: [String], createdAt: Date, updatedAt: Date, comment: [String], isFavorited: Bool, isBookmarked: Bool, url: URL) { self.id = id self.title = title self.body = body self.thumbnailUrl = thumbnailUrl self.tags = tags self.categories = categories self.createdAt = createdAt self.updatedAt = updatedAt self.comment = comment self.isFavorited = isFavorited self.isBookmarked = isBookmarked self.url = url }
と、結構な量を書く必要があり面倒です。実際のプロダクトコードでは、もっと多くのメンバ変数を持つ場合もあります。
解決法
XcodeのRefactor機能を使って自動生成します。
- class名 or struct名を右クリックする
- "Refactor"メニューを選ぶ
- "Generate Memberwise Initializer"をクリック
これで簡単にinitが生成できます。めでたしめでたし。