リソース文字列をString型変数に読み込む
リソース文字列を、String型の変数に読み込む方法を紹介します。
まずリソースファイルを用意します。リソースファイルの作り方は下記のURLをご覧ください。
リソースファイルの中身は下記のようにします。ファイル名は MyRes.strings にしました。
"msg_000" = "こんにちは";
"msg_001" = "せかい";
つぎに全体の Swift のコードです。
import SwiftUI
struct ViewMain: View {
@State var TheStr = "これはリソースのテストです."
// ファイルタイトルを使う(拡張子は不要).
let FILE_TITLE_RES_STR = "MyRes"
let THE_KEY_000 = "msg_000"
let THE_KEY_001 = "msg_001"
@State private var str_000: String = ""
@State private var str_001: String = ""
@State private var str_all = "";
var body: some View {
VStack {
Text( TheStr )
.font( .title )
Text( str_all )
.font( .title )
}
.padding()
.onAppear {
load_string_from_resource( &str_000, THE_KEY_000, FILE_TITLE_RES_STR )
load_string_from_resource( &str_001, THE_KEY_001, FILE_TITLE_RES_STR )
str_all = String(format: "%@,%@.", str_000, str_001 )
}
}
private func load_string_from_resource(
_ want: inout String,
_ key: String,
_ filename_without_ext: String
) {
let ft = filename_without_ext
if let path = Bundle.main.path(forResource: ft, ofType: "strings") {
if let dic = NSDictionary(contentsOfFile: path) as? [String: String] {
if let value = dic[key] {
want = value
} else {
want = ""
}
} else {
want = ""
return
}
} else {
want = ""
return
}
}
}
#Preview {
ViewMain()
}
実行すると下図のようになります。