結論としては、特にこだわりが無ければ、structを使う方がよいようです。
classの継承を使いたいときや、Object-Cと連携させたいときはclassを使わないといけないようです。
参照渡しを利用したいとき。つまり、
struct TestStruct {
var sampleStruct: String
init(){
sampleStruct = ""
}
}
class TestClass {
var sampleClass: String
init(){
sampleClass = ""
}
}
var testStruct = TestStruct()
var testClass = TestClass()
testStruct.sampleStruct = "Hello"
testClass.sampleClass = "Hello"
var ts1 = testStruct
var ts2 = testStruct
var tc1 = testClass
var tc2 = testClass
ts1.sampleStruct = "なんでやねん"
tc1.sampleClass = "なんでやねん"
print("structは値渡しなのでts2.sampleStructは\(ts2.sampleStruct)のままです。")
//structは値渡しなのでts2.sampleStructはHelloのままです。
print("classは参照渡しなのでtc2.sampleClassは\(tc2.sampleClass)に変わります。")
//classは参照渡しなのでtc2.sampleClassはなんでやねんに変わります。
上記のように、変数testStruct、testClassに実装し、プロパティtestStruct.sampleStruct、testClass.sampleClassに”Hello”を代入後、変数ts1、ts2に変数testStruct、tc1、tc2にtestClassを代入し、プロパティts1.sampleStruct、tc1.sampleClassを”なんでやねん”に変更した時、
structの場合、ts2.sampleStructは”Hello”のままですが、
classの場合、tc2.sampleClassは”なんでやねん”に変わります。
ということで、プロパティの値を変更したら、他のも変更させたいときはclassを使うようです。