Class vs struct for Swift
-
Upload
hirakawa-akira -
Category
Software
-
view
401 -
download
1
Transcript of Class vs struct for Swift
![Page 1: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/1.jpg)
Class or Structby Akira Hirakawa @ Burpple
![Page 2: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/2.jpg)
which should I create? class or struct?
![Page 3: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/3.jpg)
What is the difference?
![Page 4: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/4.jpg)
Apple says…
![Page 5: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/5.jpg)
Both can• Define properties
• Define methods
• Define subscripts
• Define initializers
• Be extended
• Conform to protocols
![Page 6: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/6.jpg)
class can, struct can not
• Inheritance
• Type casting
• Deinitialize
• Reference counting
• class is allocated on heap, struct is on stack
![Page 7: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/7.jpg)
Inheritance
struct SampleStruct { var num = 0 }
// cannot:( struct SampleStruct2: SampleStruct { }
![Page 8: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/8.jpg)
Reference countingclass SampleClass { } var array: [SampleClass] = .... for p in array { // increment reference counting ... // decrement reference counting }
struct SampleStruct { } var array: [SampleStruct] = .... for p in array { ... }
![Page 9: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/9.jpg)
main difference is…
![Page 10: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/10.jpg)
struct is Value Type
![Page 11: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/11.jpg)
class is Reference Type
![Page 12: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/12.jpg)
demo
![Page 13: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/13.jpg)
so,which should I create? class or struct?
![Page 14: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/14.jpg)
Apple says…
![Page 15: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/15.jpg)
create struct, when…
• data structure is simple
• properties are value type(struct)
• purpose is not to update itself, when data is passed to a method
![Page 16: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/16.jpg)
ex: CGPointpublic struct CGPoint { public var x: CGFloat public var y: CGFloat public init() public init(x: CGFloat, y: CGFloat) }
• data structure is simple
• properties are value type
• purpose is not to update itself, when data is passed to a method
![Page 17: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/17.jpg)
be careful of creating struct, when …
![Page 18: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/18.jpg)
many properties
• That struct is value type means it’s copied when assigned
• the more properties a struct has, the more memory machine needs, when copied
![Page 19: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/19.jpg)
class object in struct
demo
![Page 20: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/20.jpg)
Struct• String
• Array
• Dictionary
• Bool
• Int
• Double
• Float
![Page 21: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/21.jpg)
different from other languages
![Page 22: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/22.jpg)
performance?
![Page 23: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/23.jpg)
case 1
small class VS small struct
just create instance
![Page 24: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/24.jpg)
case 2
class with properties VS struct with properties
just create instance
![Page 25: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/25.jpg)
case 3
call method with parameter
![Page 26: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/26.jpg)
case 4
NSArray VS Array
![Page 27: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/27.jpg)
case 5
Array<class> VS Array<struct>
![Page 28: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/28.jpg)
Summary
• having few properties is better for struct
• “struct or class” depends on purpose
• ex: class can be used for Data object from API
• ex: struct can be used for Request data to API
![Page 29: Class vs struct for Swift](https://reader034.fdocuments.us/reader034/viewer/2022052405/58ee0d141a28ab98728b45f3/html5/thumbnails/29.jpg)
Akira Hirakawa http://akirahrkw.xyz
https://github.com/akirahrkw
Thanks:)