構造体を要素とする配列を初期化する
構造体を要素にもつ配列を初期化する方法をコードで示します。
struct MyStruct{
var Name: String
var Age: Int
var Rate: Double
}
arr.append( MyStruct( Name: "alpha", Age: 11, Rate: 1.11 ) )
arr.append( MyStruct( Name: "bravo", Age: 22, Rate: 2.22 ) )
arr.append( MyStruct( Name: "charlie", Age: 33, Rate: 3.33 ) )
arr.append( MyStruct( Name: "delta", Age: 44, Rate: 4.44 ) )
arr.append( MyStruct( Name: "echo", Age: 55, Rate: 5.55 ) )
関数化すると下記のようになります。
func SetDataToArray( _ arr: inout [MyStruct] ) -> Bool {
arr.removeAll()
arr.append( MyStruct( Name: "alpha", Age: 11, Rate: 1.11 ) )
arr.append( MyStruct( Name: "bravo", Age: 22, Rate: 2.22 ) )
arr.append( MyStruct( Name: "charlie", Age: 33, Rate: 3.33 ) )
arr.append( MyStruct( Name: "delta", Age: 44, Rate: 4.44 ) )
arr.append( MyStruct( Name: "echo", Age: 55, Rate: 5.55 ) )
return true
}
実際にビルドできるコードを下記に示します。
32行目の文字列の書式指定が %@ というのが落とし穴ですね。C言語をやったことがある人は %s と書きたくなってしまいます...
import SwiftUI
struct MyStruct{
var Name: String
var Age: Int
var Rate: Double
}
struct ContentView: View {
@State var arr000: [MyStruct] = []
@State var str000: String = ""
var body: some View {
VStack {
Text( str000 )
}
.onAppear(){
// 配列にデータを仕込む.
_ = SetDataToArray( &arr000 )
// テキストに表示する文字列を準備する.
for n in 0 ..< arr000.count {
let name = arr000[n].Name
let age = arr000[n].Age
let rate = arr000[n].Rate
// 文字列は %@ で指定する, タブ区切り.
str000 += String( format: "%@\t%d\t%.2f\n", name, age, rate )
}
// 文字列前後の空白と改行を除去する.
str000 = str000.trimmingCharacters( in: .whitespacesAndNewlines )
}
}
func SetDataToArray( _ arr: inout [MyStruct] ) -> Bool {
arr.removeAll()
arr.append( MyStruct( Name: "alpha", Age: 11, Rate: 1.11 ) )
arr.append( MyStruct( Name: "bravo", Age: 22, Rate: 2.22 ) )
arr.append( MyStruct( Name: "charlie", Age: 33, Rate: 3.33 ) )
arr.append( MyStruct( Name: "delta", Age: 44, Rate: 4.44 ) )
arr.append( MyStruct( Name: "echo", Age: 55, Rate: 5.55 ) )
return true
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}