{"blog_title":"\u30bb\u30b7\u30eb\u306eIT\u5099\u5fd8\u9332","provider_url":"https://hatena.blog","published":"2021-08-30 23:44:45","author_url":"https://blog.hatena.ne.jp/machinemxy/","provider_name":"Hatena Blog","blog_url":"https://cecil-it.hatenadiary.com/","description":"extension Bundle { func load<T: Codable>(from fileName: String) -> T? { guard let url = url(forResource: fileName, withExtension: \"json\") else { return nil } guard let data = try? Data(contentsOf: url) else { print(\"File \\(fileName) does not exist.\") return nil } let decoder = JSONDecoder() guard le\u2026","author_name":"machinemxy","version":"1.0","height":"190","url":"https://cecil-it.hatenadiary.com/entry/2021/08/30/234445","html":"<iframe src=\"https://hatenablog-parts.com/embed?url=https%3A%2F%2Fcecil-it.hatenadiary.com%2Fentry%2F2021%2F08%2F30%2F234445\" title=\"\u5b9f\u7528\u7684\u306aBundle Extension for Json\u30d5\u30a1\u30a4\u30eb\u30ed\u30fc\u30c9 - \u30bb\u30b7\u30eb\u306eIT\u5099\u5fd8\u9332\" class=\"embed-card embed-blogcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"></iframe>","type":"rich","width":"100%","title":"\u5b9f\u7528\u7684\u306aBundle Extension for Json\u30d5\u30a1\u30a4\u30eb\u30ed\u30fc\u30c9","categories":["Swift"],"image_url":null}