Swift ジェネリクス型で switch判定

Swift ジェネリクス型switch判定

Swiftジェネリクス型という言い方が正しいのか? とも思ったが

公式に Genericsと書いていたので 従うことにします。

下↓のコード の引数obj :Tの型でswitchする コード例です。

struct A: Codable{ var a: String}
struct B: Codable{ var b: String}

func test<T>(_ obj: T) -> String{
	switch type(of:obj) {
	case is String.Type:
		return obj as! String
	case is Int.Type:
		return String( obj as! Int )
	case is A.Type:
		let anser:String = (obj as! A).a
		return anser
	case is B.Type:
		let anser:String = (obj as! B).b
		return anser
	default:
		return ""
	}
}
    
var resultStr = ""
resultStr = test(Int(123))
resultStr = test("abc")
resultStr = test(A(a: "Codable A"))
resultStr = test(B(b: "Codable B"))
print(resultStr)

test<T>()というファンクションで 引数obj が Stringか Intもしくは struct AかBかをswitch判定しています。

Swift UTF8 CSVファイル 先頭にBOMをつける

utf8テキストファイルにBOMをつける

Swift (macOS) で、 UTF-8のCSVファイルを出力する場合、 そのままExcelで開くと文字化けします。 UTF-8のCSVファイルにはBOMをつける必要があります。

下記は、 BOMをつけるコード例です。

if let strm = OutputStream(toFileAtPath: "CSVファイルパス.csv", append: false){
	strm.open()
	let BOM = "\u{FEFF}"
	strm.write(BOM, maxLength: 3)
}

先にFileManager (createFile) で 空っぽのファイルを作っておく必要はあると思います。

2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED