見出し画像

【Console Application】基本文法 4【学習記】

言語仕様とかそういう手合の話🤤

Q.
なんで混在にこだわるの?
A.
配列や連想配列において値の型が可変な方が JSON.parse とかするとき有利だから🙄
備忘録
Swift の hash `[:]` は型不定?❎

→型混在を使う場合は Any や AnyObject を使う

#Swift
#Any #Optional
#学習記

//	基準コード
//	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 用のコードだけど最初から型混在を狙って見ようかな🤤

画像1

helloWorld の時もそうだったけど import は何故か No such が出る🙄
でもビルドすると消える…謎😞

果たして Expected element type を消す事ができるのだろうか?🤪

画像2

型宣言を取ったら推測によって Expected は出なくなった☺️
連想配列Dictionaryが波括弧ではなく配列と同じ角括弧なので JSJavaScrip 互換なのかなって思ってるとちょっとずつ違ってて割と危ないかも😞
それにしても予測のままだと型が分からなくて気持ち悪い🙄
推測で消えるのなら明確な宣言も有る筈…🤔

配列
https://tea-leaves.jp/swift/content/%E9%85%8D%E5%88%97
var a: Array<Any> = [100, 123.4, "文字列"] // 異なる型の要素

有った🤤

画像3

勝利💪😤💪

画像4

readLineSW() 呼んでないから import コメントアウトしたらエラーだらけに🙄
import が防波堤になってただけっぽい😞

16行は [String:Any] にしたら解決🤤
21行は不等号の向きが逆で「そんな記述子しらん!」って言われてただけ🙄
25行は 16行の定義の問題🤤

画像5

😞😞😞

Any を print() に投げたから「そこヤバめ。気になる」って言われてるっぽい😞
でもなんか修正候補が出てくれてる。 String 使って強制文字列化か何かに書き換わるのかな?🤔

画像6

し、親切ぅ〜🤪

String(describing:) で Any と Enum case を文字列へ
https://qiita.com/vc7/items/91070050646ecbf21ae3

JS でも強制的に toString() で型を合わせたりするから型により厳格な Swift でもそういうのが用意されてるみたいでこの String(describing:) がそれにあたるっぽい🤔
試しに String(stringWithFormat:"%@",h[i]) とか書いてみたけど Any はそもそもオブジェクトではないモノのようでこれまた怒られるという…😞
素直に String(describing:) 使っとこうねってとこなのかな🤤

画像7

🙄🙄🙄??Optional??

なんか余計なゴミOptional()が付いてる
(多分 Any としては正しい値と思われるが…)

………

………

………

Optional というのが nil を許容する挙動の型、というのは判ったけれどこの表示を無くす方法が分からない😞


次回は

Optional() という表示を除去する方法を探る😞

この記事が気に入ったらサポートをしてみませんか?