Monday, March 8, 2021
Lưu Xuân Trường's Blog
  • Trang chủ
  • Backend
    • Laravel
    • Golang
    • NodeJS
    • MongoDB
    • Redis
    • WordPress
      • Kinh nghiệm
      • Plugins
  • Frontend
    • CSS
    • Javascript
      • ReactJS
      • UmiJS
      • VueJS
      • NuxtJS
      • Angular
      • RxJS
    • Game HTML5
  • Mobile
    • React Native
    • IOS
    • Android
    • Flutter
  • Tutorials
    • Redux-Saga
  • How to
  • Góc Ngoài Lề
    • Sống Chậm Nghĩ Sâu
    • Câu Hỏi Phỏng Vấn
    • IQ Test
  • Liên Hệ
No Result
View All Result
  • Trang chủ
  • Backend
    • Laravel
    • Golang
    • NodeJS
    • MongoDB
    • Redis
    • WordPress
      • Kinh nghiệm
      • Plugins
  • Frontend
    • CSS
    • Javascript
      • ReactJS
      • UmiJS
      • VueJS
      • NuxtJS
      • Angular
      • RxJS
    • Game HTML5
  • Mobile
    • React Native
    • IOS
    • Android
    • Flutter
  • Tutorials
    • Redux-Saga
  • How to
  • Góc Ngoài Lề
    • Sống Chậm Nghĩ Sâu
    • Câu Hỏi Phỏng Vấn
    • IQ Test
  • Liên Hệ
No Result
View All Result
Lưu Xuân Trường's Blog
No Result
View All Result

Class và Struct trong Swift

Truong Pham by Truong Pham
02/04/2018
in IOS
Reading Time: 3min read
0 0
0
Class và Struct trong Swift
0
SHARES
16
VIEWS
Share on FacebookShare on Twitter

Class và Struct là những thành phần code chính trong hầu hết mọi ứng dụng iOS. Trong ngôn ngữ Objective-C, Class và Struct thật sự rất khác nhau. Tuy nhiên điều này không đúng đối với Swift. Bạn điều có thể khai báo thuộc tính, menthod trong class và struct. Trong Swift thì struct cũng hổ trợ thực hiện protocol.

Điểm giống nhau Class và Struct

  • Khai báo những thuộc tính (property) để lưu trữ giá trị, khai báo những phương thức (methods) để cung cấp chức năng và khai báo subscripts để cung cấp khả năng truy cập giá trị của chúng sử dụng cú pháp subcript.
  • Định nghĩa constructer (init) để khởi tạo giá trị ban đầu.
  • Mở rộng chức năng xa so với hiện thực mặc định ban đầu. (//4)
  • Hiện thực protocols để cung cấp những chức năng tiêu chuẩn của một loại hình nào đó.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct Bird {
    var id: Int
    var name: String
    
    init(id: Int, name: String) {
        self.id = id
        self.name = name
    }
    
    func introduce() {
        print("I am \(name).")
    }
}
 
protocol Flyable {
    func fly()
}
 
extension Bird: Flyable { //4
    func fly() {
        print("I can fly.”)
    }
}

Điểm khác nhau Class và Struct

Class có những tính chất mà Struct không có:

1.Tính kế thừa ( Inheritance ):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Vehicle {
    var manufacturer: String?
    let passengerCapacity: Int
    
    init(passengerCapacity: Int) {
        self.passengerCapacity = passengerCapacity
    }
}
 
class Car: Vehicle {
    var fuelType: String?
}
 
let car = Car(passengerCapacity: 4)

2. Kiểu tham chiếu và kiểu giá trị (Reference Types vs. Value Types):

  • let: hằng số, không thể thay đổi
  • var: biến số, có thể thay đổi
  • Value type (kiểu giá trị) ( struct, enum, string, int, Double, CGPoint, CGSize, CGFloat, Array, Dictionary ): là một kiểu mà giá trị của nó được copy khi nó được gán tới một biến hay một hằng, hoặc khi nó được truyền như thể là một parameter tới function.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct Location {
    var longitude: Double
    var latitude: Double
    
    init(longitude: Double, latitude: Double) {
        self.longitude = longitude
        self.latitude = latitude
    }
}
 
var location1 = Location(longitude: 1.23, latitude: 1.23)
var location2 = location1
 
location1.longitude = 4.56
 
print(location1.longitude) //4.56
print(location2.longitude) //1.23

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Location {
    var longitude: Double
    var latitude: Double
    
    init(longitude: Double, latitude: Double) {
        self.longitude = longitude
        self.latitude = latitude
    }
}
 
var location1 = Location(longitude: 1.23, latitude: 1.23)
var location2 = location1
 
location1.longitude = 4.56
 
print(location1.longitude) //4.56
print(location2.longitude) //4.56

  • Reference type (kiểu tham chiếu) (class, UIView, UIViewController, UITableView,…, NSString, NSNumber, NSArray, and NSDictionary ): Bản chất là tham chiếu đến ô nhớ.

3. Toán tử đồng nhất thức (Identity Operators): để xác định 2 object có tham chiếu đến cùng một ô nhớ không.

4. Khi nào dùng Struct ?

  • Cấu trúc dữ liệu đơn giản, có ít thuộc tính.
  • Struct không cần thừa kế thuộc tính hay hành vi từ bất kì kiểu khác.
  • Bạn muốn dữ liệu sẽ được sao chép rêng biệt, không liên quan đến nhau.
  • Những thuộc tính được lưu trữ bởi struct thì bản thân nó là kiểu giá trị.
Class Struct
1 Reference type (kiểu tham chiếu) Value type (kiểu giá trị)
2 Có tính kế thừa: Kế thừa từ class khác, struct, …
3 Có thêm toán tử đồng nhất thức (===) để xác định 2 object có tham chiếu đến cùng một ô nhớ không
4 Có hàm deinit
Previous Post

Sử dụng thư viện redux-act để thay thế hằng số chuỗi

Next Post

Làm sao để kiểm tra đang chạy môi trường nào trong DvaJS

Truong Pham

Truong Pham

Next Post
Làm sao để kiểm tra đang chạy môi trường nào trong DvaJS

Làm sao để kiểm tra đang chạy môi trường nào trong DvaJS

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Never give up. Today is hard, tomorrow will be worse, but the day after tomorrow will be sunshine

Jack Ma

Quotations

About me

Field of interests: Svelte, ReactJS, Angular, VueJS, React Native, Flutter, NodeJS, MongoDB, Message Broker, WordPress, AdonisJS, NestJS, NuxtJS, Docker, Microservice, Arduino, Game HTML5. Hope to share my experiences with everybody

Recent Posts

  • Code push in React Native
  • What’s middleware? How does it work?
  • Styled components trong ReactJS
  • Frontity cơ bản phần I (Tạo và chạy dự án)
  • React framework for WordPress

Recent Comments

  • truongluu on Giới thiệu về UmiJS P2 (Cấu trúc thư mục, cấu hình thường dùng)
  • Hung on Giới thiệu về UmiJS P2 (Cấu trúc thư mục, cấu hình thường dùng)
  • Redux Saga phần III (Tips khi làm việc) - Lưu Xuân Trường's Blog on Quản lý trạng thái tải khi dùng redux-saga
  • Redux Saga phần II (Các khái niệm cơ bản) - Lưu Xuân Trường's Blog on Cheatsheets Non Blocking, Blocking Redux Saga
  • truongluu on Giới thiệu về UmiJS P4 (Server Side Rendering)

Archives

  • February 2021
  • January 2021
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • March 2020
  • February 2020
  • January 2020
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • April 2018
  • March 2018

Categories

  • AdonisJS
  • Angular
  • Arduino
  • Backend
  • Câu Hỏi Phỏng Vấn
  • CSS
  • Ebook
  • Frontend
  • Frontity
  • Góc Ngoài Lề
  • How to
  • IOS
  • IQ Test
  • Javascript
  • Kinh nghiệm
  • Kinh nghiệm làm việc
  • Máy chủ
  • Mobile
  • MongoDB
  • NestJS
  • NodeJS
  • NuxtJS
  • Plugins
  • React Native
  • React Native
  • ReactJS
  • Redis
  • Redux-Saga
  • RxJS
  • Tutorials
  • UmiJS
  • Uncategorized
  • VueJS
  • WordPress

Friends

Phu's blog
  • RxJS toàn tập (P1 giới thiệu RxJS là gì)

    RxJS toàn tập (P1 giới thiệu RxJS là gì)

    0 shares
    Share 0 Tweet 0
  • Giới thiệu về UmiJS P1 (Tổng quan về umiJS)

    0 shares
    Share 0 Tweet 0
  • Redux Saga phần I (Giới thiệu)

    0 shares
    Share 0 Tweet 0
  • Giới thiệu về UmiJS P2 (Cấu trúc thư mục, cấu hình thường dùng)

    0 shares
    Share 0 Tweet 0
  • Một số câu hỏi phỏng vấn frontend developer

    0 shares
    Share 0 Tweet 0

About me

Lưu Xuân Trường

Field of interests: Svelte, ReactJS, Angular, VueJS, React Native, Flutter, NodeJS, MongoDB, Message Broker, WordPress, AdonisJS, NestJS, NuxtJS, Docker, Microservice, Arduino, Game HTML5. Hope to share my experiences with everybody

© 2020 https://luuxuantruong.info

No Result
View All Result
  • Trang chủ
  • Backend
    • Laravel
    • Golang
    • NodeJS
    • MongoDB
    • Redis
    • WordPress
      • Kinh nghiệm
      • Plugins
  • Frontend
    • CSS
    • Javascript
      • ReactJS
      • UmiJS
      • VueJS
      • NuxtJS
      • Angular
      • RxJS
    • Game HTML5
  • Mobile
    • React Native
    • IOS
    • Android
    • Flutter
  • Tutorials
    • Redux-Saga
  • How to
  • Góc Ngoài Lề
    • Sống Chậm Nghĩ Sâu
    • Câu Hỏi Phỏng Vấn
    • IQ Test
  • Liên Hệ

© 2020 https://luuxuantruong.info

Welcome Back!

Login to your account below

Forgotten Password?

Create New Account!

Fill the forms below to register

All fields are required. Log In

Retrieve your password

Please enter your username or email address to reset your password.

Log In