Closed12

Webフロントエンドエンジニア、Swiftやるってよ

Kota NonakaKota Nonaka

何を思ったか急にiOSアプリを書いてみたくなった。

実は初めてまともにやったプログラミングは高校時代に書いたiOSアプリ開発だったりするので、数年ぶりの再チャレンジ。当時はHTMLとCSSが書けるだけ、くらいの普通の高校生だったので普通に挫折した。言語もObjective-Cだったし、つらかったなあという思い出。

とりあえずアップルのSwiftのサンプルとかみたり、SwiftUIのチュートリアルやったりしてみた。
「あ、これReactだ」ということだけがわかった。

Kota NonakaKota Nonaka

とりあえずなんかExampleいい感じのないかなと思って調べてみたが、どうにもいまいちだったので試しにGitHubか何かのAPIを叩いて情報表示するアプリっぽいものを作ってみようかなと思った。

Kota NonakaKota Nonaka

流石にSwiftのお作法もそこそこにアプリ書き始めるのは結構無謀かもしれないなあという気もしなくはない。
サンプルとか読みつつ、nilの扱いとか基本的な文法(関数リテラル?の書き方が色々あるとか)は学んだつもりだが一番わからないのは名前空間がどうなっているかということ。importしなくても他のファイルにある構造体を呼び出せるのは一体どうなってるんだ

Kota NonakaKota Nonaka

例外をthrowする関数は宣言の時にthrowsを書いてやる必要がある。

func hogeFunc() throws {
  throw なんかしらのえらー
}
Kota NonakaKota Nonaka

例外をthrowする関数を呼び出すときはtry catch do ?的なやつをやらんとならんのか?
普段JS書いてるとこの辺がゆるふわになりがちなので久々にこういう感覚を味わっている。(たぶんなんか無視したりする方法ありそうだけど)

Kota NonakaKota Nonaka

とりあえずなんかリクエスト飛ぶところまではいったっぽい。

がいろいろとわからないことが多すぎる。
これはリクエストして戻ってきたjsonをJSONSerializationとかいうのに食わせて結果だしてるだけ。

let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)

構造体にマッピングする的なこと(goのunmarshal的なやつか?)できるっぽいのでそうしたい

Kota NonakaKota Nonaka
let jsonData = """
{
    "id": "uutarou10",
    "name": "kota nonaka",
    "age": 23,
}
""".data(using: .utf8)

struct User: Codable {
    var id: String
    var name: String
    var age: Int
}

let myself = try? JSONDecoder().decode(User.self, from: jsonData!)

print(myself)

playgroundで動かしてみただけだけどこれでいいらしい。
いい感じである。構造体に存在するのにJSONに存在しないプロパティが存在したりするとdecodeが失敗してくれるのも嬉しいポイント。(Goのunmarshalもこういう動きをすると思って作って失敗した記憶(

このスクラップは2021/06/06にクローズされました