Webフロントエンドエンジニア、Swiftやるってよ
何を思ったか急にiOSアプリを書いてみたくなった。
実は初めてまともにやったプログラミングは高校時代に書いたiOSアプリ開発だったりするので、数年ぶりの再チャレンジ。当時はHTMLとCSSが書けるだけ、くらいの普通の高校生だったので普通に挫折した。言語もObjective-Cだったし、つらかったなあという思い出。
とりあえずアップルのSwiftのサンプルとかみたり、SwiftUIのチュートリアルやったりしてみた。
「あ、これReactだ」ということだけがわかった。
試しに買ってザーッと眺めてみた。(全然手は動かしてない)
とりあえずなんかExampleいい感じのないかなと思って調べてみたが、どうにもいまいちだったので試しにGitHubか何かのAPIを叩いて情報表示するアプリっぽいものを作ってみようかなと思った。
流石にSwiftのお作法もそこそこにアプリ書き始めるのは結構無謀かもしれないなあという気もしなくはない。
サンプルとか読みつつ、nilの扱いとか基本的な文法(関数リテラル?の書き方が色々あるとか)は学んだつもりだが一番わからないのは名前空間がどうなっているかということ。importしなくても他のファイルにある構造体を呼び出せるのは一体どうなってるんだ
HTTPリクエストはこれでいいのかしら
Swiftはnil安全ですばらしいねえ
guardも便利。
例外をthrowする関数は宣言の時にthrowsを書いてやる必要がある。
func hogeFunc() throws {
throw なんかしらのえらー
}
例外をthrowする関数を呼び出すときはtry catch do ?的なやつをやらんとならんのか?
普段JS書いてるとこの辺がゆるふわになりがちなので久々にこういう感覚を味わっている。(たぶんなんか無視したりする方法ありそうだけど)
とりあえずなんかリクエスト飛ぶところまではいったっぽい。
がいろいろとわからないことが多すぎる。
これはリクエストして戻ってきたjsonをJSONSerializationとかいうのに食わせて結果だしてるだけ。
let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)
構造体にマッピングする的なこと(goのunmarshal的なやつか?)できるっぽいのでそうしたい
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もこういう動きをすると思って作って失敗した記憶(
非同期処理は基本的にはcallbackを使って処理するのが一般的なんだろうか?(async/awaitはProposalにあるけどまだ入ってないっぽい話をみた。)
あとこういうのもあるらしい。
参考:
よさげな(=ある程度の規模・実用性のある例)チュートリアルっぽいのを見つけた。