Swiftはで始めたこと少しplaygroundで遊んだことがある。配列の操作が遅かったのを覚えている。
それ以前のObjective-Cは本を数冊買ったが使えるようになった記憶はなく、文字列操作で地獄をみた記憶がある。
今回、使い勝手が良くなっていると数値変換、配列、辞書を作成していて思った。
関数名の長さには閉口、長すぎ。
だいぶ楽になったかと思っていた矢先、最後文字列の検索、文字コード変換に着手すると突然 異次元をさまよう。(10行〜21行)
文字列操作の設計が下手で本当に悩む。実務ベースだとこんな感じでないと対応できないのかもしれないが、
開発するなら、全部ラッピングした関数を作って対応するしかない。
今日nullを設計した人が後悔しているという記事をみかけた。
ここではまっているのも実はnil処理がいろんなところに入った設計が遠因。
他にも関数への引き渡しの変数名まで呼び出し側で入れるとか、入れまちがいは減るかもしれないけど...
設計の修正も多い。4年以上前の情報は言語側が変更していて動かなくなっているものも多く、
新しく作っている方の情報がなければ、このシートはまったく作れなかったです。
50記事ぐらいは目を通してなんとか作成しています。ひどいぜアップル。


はたしていけるのか、廻廻奇譚を聞いてから開始。
例によってチュートリアルから、and or は && || を確認

試験問題は5問 いつもより1問多い。
最後の問題、意味がわからない。プログラムの問題ではなくて英語の問題文が何をいっているのかさっぱり。
問題文のコピペは効かない。google翻訳に問題文を入力。しかし意味がわからない。
簡易な英語なんだけど、英単語の意味がわかっていない。
最期の問題開始時は25分ぐらい余っていた。意味がわからず 7、8分ぐらいすぎる。
ここで隣人が騒ぎ出した。(電話なんだけど声がデカイ)
軽く発狂しそうになって、rionosの曲で心を落ち着かせる。
digitが数字なら、letterはアルファベットを意味するらしい。(翻訳でも正しい問題の意味はでてきませんでした)

地道にグルグルまわすプログラムを何個か作成して、40分オーバーでなんとかクリア
チートシートの追記
近似値を整数で表示するのは Int(round(a/n))
a、nはvar a = 0.0で定義しないとroundでエラーを発生させます。
平たい版
import Glibc
import Foundation
let a = 2
var s = "abcde";s += "f" // 文字列 追加
print(pow(Double(a), 0.5),Int("123")! + 1, s, abs(-5)) // 平方根 数値化 絶対値
print(String(15, radix: 2), String(15, radix: 16)) // 2進数 16進数
print("abcd".uppercased() + "WXYZ".lowercased()) // upper lower
var ar = "wwd1 wd2 wd3".components(separatedBy:" ") // split
ar[0]=ar[0].replacingOccurrences(of:"w",with:"wor") // replace
print("\n** find **", ar, ar.index(of:"wd3")!) // find "!"はOptional(nul許容型)を外す技
print(s.index(of: "a")!) // Optional(Swift.String.Index(_rawBits: 1))
print(s, s.firstIndex(of: "b")!) // 文字列の検索 Index型?になるらしい
print(s.distance(from: s.startIndex, to: s.firstIndex(of: "d")!)) //Indexを数値化
print(s.dropFirst(3).dropLast(1)) //最初3文字と最後1文字を削除
func sub(txt: String, pos: Int, len: Int) -> String { //自作関数 文字列抽出
returnString(txt.dropFirst(pos).dropLast(txt.count-pos-len))
}
print("\n** func **", sub(txt:"0123",pos:1,len:2))
print(sub(txt:"0123",pos:0,len:2))
print("chr", String(bytes: [97], encoding: .utf8)!) // 文字変換 chr(97)
print("ord", "a".utf8.first!) // 文字コード ord("a")
var ar2 = ["4", "5", "6"] // 配列定義
ar += ar2 // 配列追加
ar.sort{$0 < $1} // 配列ソート
print("\n** array **", ar, "\n** dict **")
var di = ["c": 3, "a": 1, "e": 5, "m": 13] // 辞書定義
di["b"] = 2 // 辞書追加
di.removeValue(forKey:"e") // 辞書削除
for (alpha, num) in di {print("\(alpha)は \(num)番")} // 辞書ループ 順番不明
var t = [0, 0]
for x in (1...10){ //loop
if (x%2==0){t[0] += x}else{t[1] += x} //if else
} //補足 ヌル真偽 nil true false
func test(v:[String]) -> (v1:[String], n1:Int){return (v,v.count)} //配列渡し タプル戻し
print(t, test(v:["1","2","3"]).n1,test(v:["a","b"]).v1)