SwiftUI split カンマ区切りなどの文字列を区切る場合

SwiftUI split components

Swiftの文字列Split区切り処理にはsplitとcomponentsがある。わたしの認識したこの2つの違いは戻り値がsplitの場合は[Substring]でcomponentsは[String]ということです。componentsを使い文字列を区切った処理するSwiftUIの場合、下記のようなコードです。

struct TComponentsView: View  {
    @State var s1: String = ""
    var body: some View {
        VStack {
            TextField("TextField", text: self.$s1)
            ForEach(s1.components(separatedBy: " "), id: \.self){
                Text("\($0)")
            }
            Spacer()
        }
    }
}

splitの場合下記のコードです。

struct TSplitView: View {
    @State var s1: String = ""
    var body: some View {
        VStack {
            TextField("TextField", text: self.$s1)
            ForEach(s1.split(separator: " "), id: \.self.description){
                Text("\($0.description)")
            }
            Spacer()
        }
    }
}

JavaScript JSON Key一覧取得

JSONのKey取得

JavaScriptのJSONには型の概念が無いので引数に渡されたJSONが正しいかなどをキーの有無で判断することが必要な場合があります。JSONはキー・バリューでデータを保持しています。そのJSON変数に特定のキーがあるのかを判断するには、Object.keys()を使います。下記のJSONのキーの一覧を取得する場合

{
    "title": "装甲騎兵ボトムズ",
    "direction": "高橋良輔",
    "character": "キリコ・キュービィー"
}

上記のJSONがあったとして、このデータのキーとバリューを一気に表示するために下記のようなコードです。

const s1 = '{"title": "装甲騎兵ボトムズ","direction": "高橋良輔","character": "キリコ・キュービィー"}'
const j1 = JSON.parse(s1)
const keyList = Object.keys(j1)

for (let k1 in keyList){
    console.log(`key=${keyList[k1]} | value=${j1[keyList[k1]]} `)
}

Object.keys()を実行すると変数keyListに String[]が入ります。そのkeyListの中は[“0″,”1″,”2”]のようなデータが入ります。console.log()から吐き出されたデータは下になります。

Safari のJavaScriptコンソール画面
Safari のJavaScriptコンソール画面

Object.keys()はキー・バリュー構造以外のStringやArrayでも使えます。

const arrInt = [1,2,3]
const keyList = Object.keys(arrInt)
for (let k1 in keyList){
    console.log(`配列[${keyList[k1]}]=${arrInt[keyList[k1]]} `)
}

上記のarrInt(Number配列)にObject.keys(arrInt)したコードを実行すると下のようになります。

JavaScript 配列のキーからバリュー取り出し
JavaScript 配列のキーからバリュー取り出し

文字列も同じようにObject.keys()が使えます。

Object.keys(文字列)も使えます。
Object.keys(文字列)も使えます。

JSONデータが2階層以上ある場合下記のように書くこともできます。

const x1 = {
    "title": "装甲騎兵ボトムズ",
    "direction": "高橋良輔",
    "character": { 
        "main": "キリコ・キュービィー" , 
        "heroine": "フィアナ"
    }
}

const f1 = (_x1, _thNum) => {
    const keyList = Object.keys(_x1)
    for (let k1 in keyList){
        if (Object.prototype.toString.call(_x1[keyList[k1]])  != "[object Object]") {
            console.log(`layer[${_thNum}] | ${keyList[k1]} | ${_x1[keyList[k1]]} `)
        } else {
            f1(_x1[keyList[k1]], _thNum + 1)
        }
    }
}

f1(x1, 1)

結果は下のようになります。

複数階層 JSONの場合
複数階層 JSONの場合

2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED