【Console Application】基本文法 4【学習記】
言語仕様とかそういう手合の話🤤
Q.
なんで混在に拘るの?
A.
配列や連想配列において値の型が可変な方が JSON.parse とかするとき有利だから🙄
備忘録
Swift の hash `[:]` は型不定?❎
→型混在を使う場合は Any や AnyObject を使う
// 基準コード
// JavaScript
let b = true;
let n = 0;
let s = "string";
let a = [false,1,"2"];
let h = {key0:true,key1:-1,key3:"hash"};
//
console.log(`b : ${b}\n`);
console.log(`n : ${n}\n`);
console.log(`s : ${s}\n`);
for(let i=0 ; i<a.length ; i++) // (i in a) では順番が保証されない
{
console.log(`a [${("0"+i).slice(-2)}] : ${a[i]}\n`);
}
for(let i in h)
{
console.log(`h [${i}] : ${h[i]}\n`);
}
【 Swift 編】変数を参照したり配列から取り出したり
それじゃ基準のコードを元に書いてこうかな🤤
// Swift
var b : Bool = true
var n : Int = 0
var s : String = "string"
var a : [Int] = [0,1,2] // Swift も型混在配列は無理っぽい
var h : [String:Int] = ["key0":1,"key1":-1,"key3":0] // NSDictionary の方が強力?
↑は以前書いた Swift 用のコードだけど最初から型混在を狙って見ようかな🤤
helloWorld の時もそうだったけど import は何故か No such が出る🙄
でもビルドすると消える…謎😞
果たして Expected element type を消す事ができるのだろうか?🤪
型宣言を取ったら推測によって Expected は出なくなった☺️
連想配列が波括弧ではなく配列と同じ角括弧なので JS 互換なのかなって思ってるとちょっとずつ違ってて割と危ないかも😞
それにしても予測のままだと型が分からなくて気持ち悪い🙄
推測で消えるのなら明確な宣言も有る筈…🤔
配列
https://tea-leaves.jp/swift/content/%E9%85%8D%E5%88%97
var a: Array<Any> = [100, 123.4, "文字列"] // 異なる型の要素
有った🤤
勝利💪😤💪
readLineSW() 呼んでないから import コメントアウトしたらエラーだらけに🙄
import が防波堤になってただけっぽい😞
16行は [String:Any] にしたら解決🤤
21行は不等号の向きが逆で「そんな記述子しらん!」って言われてただけ🙄
25行は 16行の定義の問題🤤
😞😞😞
Any を print() に投げたから「そこヤバめ。気になる」って言われてるっぽい😞
でもなんか修正候補が出てくれてる。 String 使って強制文字列化か何かに書き換わるのかな?🤔
し、親切ぅ〜🤪
String(describing:) で Any と Enum case を文字列へ
https://qiita.com/vc7/items/91070050646ecbf21ae3
JS でも強制的に toString() で型を合わせたりするから型により厳格な Swift でもそういうのが用意されてるみたいでこの String(describing:) がそれにあたるっぽい🤔
試しに String(stringWithFormat:"%@",h[i]) とか書いてみたけど Any はそもそもオブジェクトではないモノのようでこれまた怒られるという…😞
素直に String(describing:) 使っとこうねってとこなのかな🤤
🙄🙄🙄
なんか余計なゴミが付いてる
(多分 Any としては正しい値と思われるが…)
………
………
………
Optional というのが nil を許容する挙動の型、というのは判ったけれどこの表示を無くす方法が分からない😞
次回は
Optional() という表示を除去する方法を探る😞
この記事が気に入ったらサポートをしてみませんか?