Swift class vs struct

Class vs Struct

Which to use?

In swift programming, one of big questions is class and struct.

Pure data -> struct, manipulation -> class Not bad answer.

From Swift Documentation

Swift Documentation answered this question. (Structures and Classes)

Ref vs Value

class ClassA {
    var a : Int = 0
}

struct StructA {
    var a : Int
}

func methodClassA(_ a: ClassA) {
    // ref
    func plusA() {
        a.a = a.a + 1
    }
}

func methodStructA(_ a: StructA) {
    // value
    func plusB() {
        // a.a = a.a + 1 Cannot!!!
    }
}

Class is reference, Structure is value (copy)

Inheritance

StructureOnly Protocol
ClassProtocol, Class, Struct
class ClassA {
    var a : Int = 0
}

struct StructA {
    var a : Int
}

class ClassAX : ClassA, Codable {
    
}

class ClassAX2 : StructA {
    
}

/* // Cannot
struct StructAX : StructA {
    
}*/
// OK
struct StructAX : Codable {
    
}

Change variable

Struct cannot change variable in func. If you want, need to add mutating prefix

class ClassB {
    var changeB : Int
    
    init(changeB: Int) {
        self.changeB = changeB
    }
    
    func updateB(target: Int) {
        self.changeB = target
    }
}

var classB = ClassB(changeB: 5)
classB.changeB = 3
print(classB.changeB)

struct StructB {
    var notB : Int
    
    mutating func updateB(target: Int) {
        self.notB = target
    }
}

var structB = StructB(notB: 5)
structB.notB = 3
print(structB.notB)
iOS
スポンサーリンク
Professional Programmer2

コメント