GIỚI THIỆU VỀ CLASS, CLOSURE TRONG SWIFT3 Ở bài trước mình đã giới thiệu cho các bạn các kiểu dữ liệu trong Swift 3.. các bạn có thể tham khảo block tương tự closure trong Objective C tạ
Trang 1GIỚI THIỆU VỀ CLASS, CLOSURE TRONG SWIFT3
Ở bài trước mình đã giới thiệu cho các bạn các kiểu dữ liệu trong Swift 3 Tiếp theo mình sẽ giới thiệu cho các bạn closure(block) và class trong swift3
Chắc các bạn từng học qua Objective C rất quen thuộc với block, class Tuy nhiên trong swift3 có nhiều cải tiến về ngôn ngữ,đem lại những lợi ích tuyệt vời !
bài hướng dẫn này chúng ta tiếp tục sử dụng playground để làm việc với swift 3 khởi tạo playground File->new->Playground : đặt tên:”class_closure”
1 closure tương tự block trong Objective C:
Closure là một biến đặc biệt, không chỉ lưu lại giá trị của một biến mà còn lưu lại một đoạn code Mục đích chủ yếu là khi ta gặp một đoạn code lặp lại nhiều lần ta
sử dụng closure sẽ giúp quản lý cũng như xử lý một cách nhanh gọn Ngoài ra ứng dụng chủ yếu của closure là khi ta tải dữ liệu từ server cần chạy đa luồng, closure giúp lưu lại data mà data thay đổi
các bạn có thể tham khảo block tương tự closure trong Objective C tại đây
– Cách khai báo closure tổng quát:
var Tênclosure kiểu tham số truyền vào,kiểu tham số truyền vào)->(kiểu trả về)
= {(tham số:Kiểu tham số truyền vào,tham số:Kiểu tham số truyền vào) in
//code
return giá trị trả về
}
– Cách truyền giá trị cho closure:
Tên closure(giá trị,1giá trị2)
ví dụ : tính tổng 2 số:
1 var closureTongQuat:(Double,Double)->(Double) = {(n:Double,m:Double) in
Trang 22 return m+n;
3 }
4 closureTongQuat(1,4)
kết quả trả về :5
– Kiểu khai báo ngầm định:
1 var closureTong = {(n:Double,m:Double) in
2 return m+n;
3 }
4
5 closureTong(1,2)
– Kiểu khai báo ngắn 1:
1 var closureHieu:(Double,Double)->(Double) = { (n,m)in
2 return n-m
3 }
4 closureHieu(9,4)
– Kiểu khai báo ngắn 2: Sau in chỉ thực hiện duy nhất một dòng code Nếu quá 1 dòng sẽ báo lỗi
1 var closureShort:(Double,Double)->(Double) = {
2 (n,m)in n-m
3 }
– Kiểu khai báo ngắn 3: $0,$1… là các biến đại diện cho n tham số chúng ta truyền vào
1 closureShort(7,2)
2 var short :(Double,Double)->(Double)
3 short={$0+$1}
4 short(0,1)
Trang 3Như thế mình đã giới thiệu cho các bạn về closure … closure tương tự block nhé ứng dụng cụ thể mình đã giới thiệu rất nhiều trong Objective C
2 – Class trong swift 3:
Class là gì ? các bạn chắc đã nắm rất chắc rồi =D … Ở đây mình sẽ giới thiệu cụ thể cách khai báo, tạo đối tượng và cách gọi phương thức thuộc tính trong Swift 3
– Khai báo class trong Swift 3:
class tên class{
var tên thuộc tính:kiểu dữ liệu = giá trị mặc định
var tên thuộc tính:kiểu dữ liệu! // khai báo có thể nil
func Tên phương thức(tham số1,tham số2,tham số 3 ) -> kiểu trả về {// phương thức
// code …
}
var tên thuộc tính cần get set:Kiểu dữ liệu của thuộc tính{
set{
// code …
// ở đây có một đối tượng đặc biệt đó là newValue lưu giá trị truyền vào
}
get{
return Giá trị trả về
}
}
}
Trang 4Ví dụ: Mình đã giải thích rất cụ thể trong code
1 //class
2 class people{
3 private var name:String = "binh"// khai báo property name giá trị mặc đinh là
"binh"
4 private var address:String = "thanh hoa"// khai báo property thuộc tính
address giá trị mặc định "thanh hoa"
5 private var age:Int = 22// khai báo thuộc tính giá trị mặc đinh 22
6 var Name:String{// ham set get giá trị cho thuộc tính name
7 set{
8 name=newValue// giá trị truyền vào được lưu trong newValue-> gửi đến thuộc tính name
9 }
10 get{
11 return name
12 }
13 }
14 var Address:String{// tương tự
15 set{
16 address=newValue
17 }
18 get{
19
20 return address
21 }
22 }
23 var Age:Int{// tương tự
24 set{
25 age=newValue
26 }
27 get{
28 return age
29 }
30 }
31 func Infor() -> Int {// hàm hiển thị thông tin
32 let inTT = "\(name) \(address) \(age)"// nối chuỗi
33 print(inTT)// hiển thị thông tin
34 return age
Trang 535 }
36
37 }
Tạo đối tượng trong class:
– Tổng quát:
var Tên đối tượng =class(có or có tham số)
Ví dụ đối với class bên trên:
1 var peo = people();
Truy xuất thuộc tính phương thức:
Object.tên phương thức or đối tượng
– ví dụ: kết quả mình comment bên cạnh luôn !
1 // truy xuất trực thuộc tính
2 peo.name// binh
3 peo.address// thanh hoa
4 peo.age//22
5 // set giá trị thuộc tính thông qua phương thức
6 peo.Name="đạt"// gán lại gia trị cho thuộc tính name
7 peo.Address="hải dương"// gán lại giá trị
8 peo.age=25// gán lại giá trị
9 // get giá trị thuộc tính thông qua phương thức
10 peo.Name// đạt
11 peo.Address// hải dương
12 peo.Age// 25
13 // gọi hàm infor của đối tượng
14 peo.Infor()// đạt hải dương 25
Hàm khởi tạo trong class:
Trang 6ví dụ:
// hàm khởi tạo có tham số:
init(para1:kiểu dữ liệu,para2:kiểu dữ liệu,para3:kiểu dữ liệu){
self.thuộc tính1=para1
self.thuộc tính2=para2
self.thuộc tính3=para3
}
//hàm khởi tạo không tham số
init(){
}
ví dụ trong class trên:
1 init(name:String,address:String,age:Int){
2 self.name=name
3 self.address=address
4 self.age=age
5 }
6 init(){
7
8 }
Khi tạo đối tượng có thể truyền tham số vào thông qua hàm khởi tạo tương tự như constructor trong java
Ngoài ra trong swift 3 còn có hàm willSet, didSet:
willSet: hàm này thuộc tính vẫn còn giữ giá trị mặc định
didSet: hàm này thuộc tính đã được gán giá trị mới
1 class number {
Trang 72 var IntNumber1:Int = 0{
3 // trước sự thay đổi
4 willSet{
5 print(IntNumber1)// giữ giá trị mặc định của biến.kết quả 0
6 print(newValue)// có thể sử dụng giá trị newvalue kết quả mới 5
7 }
8 didSet{
9 print(IntNumber1)// không có giá trị newValue kết quả thuộc tính =5
10
11 }
12
13 }
14 }
Gọi hàm:
1 var so = number()
2 so.IntNumber1
3 so.IntNumber1=5
4 so.IntNumber1