Skip to content

Instantly share code, notes, and snippets.

@iTrooz
Last active April 4, 2025 10:40
Show Gist options
  • Save iTrooz/8c766df046d2eb70b2361fdccb782e9d to your computer and use it in GitHub Desktop.
Save iTrooz/8c766df046d2eb70b2361fdccb782e9d to your computer and use it in GitHub Desktop.
Swift is bad
// wdym structs and classes have different assignment semantics, and it still persists with protocols ??
protocol P {
var data: Int { get set }
}
struct A: P {
var data = 0
}
class B: P {
var data = 0
}
func func1() {
var s = A()
s.data = 5
var c = B()
c.data = 5
print("S data: \(s.data)")
print("C data: \(c.data)")
var s2 = s
var c2 = c
s2.data = 10
c2.data = 10
print("Updated A data: \(s.data)")
print("Updated B data: \(c.data)")
}
func func2() {
var s: P = A()
s.data = 5
var c: P = B()
c.data = 5
print("S data: \(s.data)")
print("C data: \(c.data)")
var s2: P = s
var c2: P = c
s2.data = 10
c2.data = 10
print("Updated A data: \(s.data)")
print("Updated B data: \(c.data)")
}
func main() {
print("Function 1:")
func1()
print("\nFunction 2:")
func2()
}
main()
/* Output:
Function 1:
S data: 5
C data: 5
Updated A data: 5
Updated B data: 10
Function 2:
S data: 5
C data: 5
Updated A data: 5
Updated B data: 10
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment