T.TAO
Back to Blog
/3 min read/Others

Metal #0 Swift復習

Metal #0 Swift復習

Metal #0 Swift復習

  • Lingheng Tao
  • 2024年3月22日
  • 読了時間 3 分

Unity Shader Content Table Metal #22 [Appendix] SwiftUI Shader CG Paper #2 KinectFusion: Real-time 3D Reconstruction and Interaction Using a Moving Depth Camera

#ComputerGraphics#GameEngine#TechnicalArt

Metal は Objective-C と C++ で書けるが、多くの Metal ドキュメントやチュートリアルは Swift で書かれている。本ノートでは Swift の簡単な復習を行う。

変数宣言

値型の宣言

Swift では以下の構文で変数を宣言する。

Plain Text// 変数
var str = "Hello World"
var myVariable = 123 
var myInt : Int = 5 // 明示的な型宣言

// 定数
let constantVariable = 123
let myExplicitDouble : Double = 5.0

// 配列
let intArray = [1,2,3,4,5]
let expIntArray : [Int] = [1,2,3,4,5]

// タプル
let fileNotFound = (404, "File Not Found")
let serverError = (code: 500, message: "Internal Server Error")
// タプルは各値のインデックスを提供するので、serverError.message で2番目の要素を取得可能

// 辞書
var crew = ["A": "Tony", "B":"Aaron", "C":"Steve"]
print(crew["A"]) // "Tony"
crew["D"] = "Eric" // ("D", "Eric") を辞書に追加
crew.removeValue(forKey:"D") // ("D", "Eric") を削除

var と let の違いは変数の可変性。let で宣言した変数は不変で、後で変更するとコンパイラがエラーを出す。

Swift 標準ライブラリでは、Array、Dictionary、Set などのコレクション型は値型として設計されている。変数や定数に代入したり、関数に渡すときは実際にはコピーを操作する。ただし Swift は Copy-on-Write (COW) 戦略で最適化しており、実際のコピーはデータを変更する必要がある時のみ発生する。

関数

宣言

Plain Text// 引数なしの手続き
func HelloWorld() {
	print("Hello World")
}

// 引数なし、戻り値あり
func MyNumber() -> Int {
	return 123
}

// 引数あり
func Plus(firstVal: Int, secondVal: Int) -> Int {
	return firstVal + secondVal
}