Lập trình SWIFT cho IOS

46 359 0
Lập trình SWIFT cho IOS

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Swift là một ngôn ngữ lập trình để phát triển app trên nền tảng iOS và Mac OS X. Nó được xây dựng dựa trên nền tảng C và Objective C tuy nhiên không hề bị rằng buộc về mặt phải được tương thích với C. Swift cũng tuân theo những pattern lập trình an toàn, nó cũng có những tính năng hiện đại có thể giúp cho việc lập trình với Swift trở nên dễ dàng và linh hoạt hơn.Swift được Apple giới thiệu vào tháng 6 năm ngoái. Ngôn ngữ này kế thừa những điểm mạnh của Objective C. Và hơn thế nữa, Swift có rất nhiều cải tiến về quản lý bộ nhớ, trình biên dịch và cú pháp lệnh. Nếu bạn đã từng được học qua Python thì bạn có thể thấy Swift có những nét tương đồng với Python (scripting language) dù Swift vẫn cần dùng tới trình biên dịch (compiler).

LẬP TRÌNH SWIFT BÀI SƠ LƯỢC VỀ NGÔN NGỮ LẬP TRÌNH SWIFT Swift ngôn ngữ lập trình để phát triển app tảng iOS Mac OS X Nó xây dựng dựa tảng C Objective C nhiên không bị buộc mặt phải tương thích với C Swift tuân theo pattern lập trình an toàn, có tính đại giúp cho việc lập trình với Swift trở nên dễ dàng linh hoạt Swift Apple giới thiệu vào tháng năm ngoái Ngôn ngữ kế thừa điểm mạnh Objective C Và nữa, Swift có nhiều cải tiến quản lý nhớ, trình biên dịch cú pháp lệnh Nếu bạn học qua Python bạn thấy Swift có nét tương đồng với Python (scripting language) dù Swift cần dùng tới trình biên dịch (compiler) Bài hướng dẫn sơ lược ngôn ngữ lập trình Các sau chúng vào ứng dụng cụ thể Swift Hàm main Đối với Objective C, cần hàm main tất ứng dụng Tuy nhiên swift (giống ngôn ngữ scripting) hàm main bỏ qua Ví dụ, bạn viết: Println(“Hello world”) Đây hoàn toàn chương trình hoàn thiện với dòng lệnh Chú ý khác với Objective C cần ký tự @trước String nhiên Swift ký tự bị bỏ qua Biến số Để khai báo biến bạn dùng từ khoá var, bạn dùng từ khoá let var myVariable = 42 myVariable = 50 let myConstant = 42 Hãy để ý Swift không yêu cầu bạn phải khai báo kiểu giá trị dịch chương trình Điều đồng nghĩa với việc kiểu giá trị xác định running time Như nhiều khả Swift chạy không nhanh Objective C Objective C xác định kiểu giá trị lúc biên dịch chương trình Bạn định kiểu giá trị khai báo biến hay sau: let explicitDouble: Double = 70 Để thêm value vào string, bạn sử dụng cách sau: let apples = let oranges = let appleSummary = "I have \(apples) apples." let fruitSummary = "I have \(apples + oranges) pieces of fruit print(fruitSummary) Mảng từ điển Bạn tạo mảng từ điển cách dùng ký tự [] sau: var shoppingList = ["catfish", "water", "tulips", "blue paint"] shoppingList[1] = "bottle of water" var occupations = [ "Malcolm": "Captain", "Kaylee": "Mechanic", ] occupations["Jayne"] = "Public Relations Hãy ý Objective C dùng ký hiệu {} để tạo Dictionary Với hai ngôn ngữ sử dụng số để truy cập thành phần mảng, dùng key để truy cập vào giá trị dictionary Để tạo mảng rỗng hay dictionary rỗng, bạn sử dụng ký tự đây: let emptyArray = [String]() let emptyDictionary = [String: Float]() Hay đơn giản hơn: shoppingList = [] occupations = [:] Điều khiển Swift Giống ngôn ngữ khác, Swift có điều khiển If, switch điều khiển lặp while, do-while, for Điều đặc biệt dấu ngoặc tròn hoàn toàn bỏ qua, nhiên dấu ngoặc nhọn bắt buộc: 10 let individualScores = [75, 43, 103, 87, 12] var teamScore = for score in individualScores { if score > 50 { teamScore += } else { teamScore += } } print(teamScore) Với vòng lặp for bạn định dải giá trị lặp đây: var firstForLoop = for i in ” để kiểu giá trị trả về: func greet(name: String, day: String) -> String { return "Hello \(name), today is \(day)." 3} greet("Bob", "Tuesday")” Còn khái niệm Swift “tuple” Tuple khái niệm lập trình để cấu trúc liệu bao gồm nhiều thành phần Hàm Swift cho phép trả giá trị dạng Tuple Và điều linh hoạt bạn muốn hàm trả giá trị nhiều 1: 10 11 12 13 14 15 16 17 func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) { var = scores[0] var max = scores[0] var sum = for score in scores { if score > max { max = score } else if score < { = score } sum += score } return (min, max, sum) } let statistics = calculateStatistics([5, 3, 100, 3, 9]) statistics.sum statistics.2 Đặc biệt hơn, tuple bạn hoàn toàn truy cập giá trị cách sử dụng số sử dụng tên Đây lợi lớn so với kiểu Array thông thường Tương tự với C++, Python số ngôn ngữ khác Swift cho phép hàm khai báo với số lượng tham số đầu vào thay đổi Cụ thể sau: 6 func sumOf(numbers: Int ) -> Int { var sum = for number in numbers { sum += number } return sum } sumOf() sumOf(42, 597, 12) Ở hàm trên, numbers trình biên dịch ngầm hiểu có kiểu array, để tìm giá trị tổng lặp qua tất giá trị thành viên array Bạn khai báo hàm bên hàm khác, hàm truy cập biến khai báo hàm Việc dùng hàm bên hàm có ích lợi trường hợp hàm bạn dài hay phức tạp Bạn tổ chức thành hàm nhỏ dễ đọc func returnFifteen() -> Int { var y = 10 func add() { y += 5 } add() return y 8} returnFifteen() Trong Swift hàm vừa nhận giá trị đầu vào hàm khác lại vừa trả giá trị hàm Ví dụ: Trả giá trị hàm func makeIncrementer() -> (Int -> Int) { func addOne(number: Int) -> Int { return + number } return addOne } var increment = makeIncrementer() increment(7) Nhận giá trị tham số hàm khác: 7 10 11 12 13 func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool { for item in list { if condition(item) { return true } } return false } func lessThanTen(number: Int) -> Bool { return number < 10 } var numbers = [20, 19, 7, 12] hasAnyMatches(numbers, lessThanTen) Swift có đưa khái niệm gọi Closure Bản chất Closure đoạn code giới hạn cặp dấu {} Hàm thực chất trường hợp đặc biệt Closủe Khi sử dụng Closure bạn không cần dùng tên bắt buộc dùng từ khóa “in” closure Ví dụ: numbers.map({ (number: Int) -> Int in let result = * number return result }) Closure đơn giản hoá này: let mappedNumbers = numbers.map({ number in * number }) Việc dùng Closure hiệu sẻ làm cho app bạn ngắn gọn bạn cần thêm thời gian để làm quen với khái niệm Closure bàn kỹ sau Class Swift Giống với Java C++ để khai báo lớp bạn sử dụng từ khóa class Những đặc tính Method thành viên khai báo cách bình thường class Shape { var numberOfSides = func simpleDescription() -> String { return "A shape with \(numberOfSides) sides." } 6} Để truy cập biến hàm, bạn phải dùng dấu chấm “.” var shape = Shape() shape.numberOfSides = var shapeDescription = shape.simpleDescription() Bạn thêm vào hàm init để khởi tạo giá trị cho biến thành viên lớp sau: class NamedShape { var numberOfSides: Int = var name: String init(name: String) { self.name = name } func simpleDescription() -> String { 10 return "A shape with \(numberOfSides) sides." 11 } 12 } Để kế thừa lớp cha, bạn dùng dấu “:” Để override method lớp cha bạn sử dụng từ khoá “override”: class Square: NamedShape { var sideLength: Double init(sideLength: Double, name: String) { self.sideLength = sideLength 9 10 11 12 13 14 15 16 17 18 19 20 super.init(name: name) numberOfSides = } func area() -> Double { return sideLength * sideLength } override func simpleDescription() -> String { return "A square with sides of length \(sideLength)." } } let test = Square(sideLength: 5.2, name: "my test square") test.area() test.simpleDescription() Giống Objective-C, bạn viết setter & getter cho property class Bạn sử dụng từ khoá “set” cho setter & “get” cho getter Bạn sử dụng method “willSet” “didSet” để chèn thêm vào số đoạn code cần thiết trước & sau set giá trị cho property Chi tiết việc dùng setter getter đề cập phần Một điểm bạn cần lưu ý khác biệt method khai báo bên lớp hàm Tham số đầu vào hàm dùng nội hàm tham số method dùng gọi method Mặt khác khai báo thêm tên cho tham số đây: class Counter { var count: Int = func incrementBy(amount: Int, numberOfTimes times: Int) { count += amount * times } } var counter = Counter() counter.incrementBy(2, numberOfTimes: 7) Đến bạn nắm thêm nhiều khái niệm cách sử dụng lập trình với Swift Swift thực ngôn ngữ vô linh hoạt cung cấp cho bạn thêm nhiều tính mẻ mà ngôn ngữ lập trình khác Chúc bạn học tốt 10 } 12 13 let awesomeObject = AwesomeClass() 14 15 print(awesomeObject.originalFunction()) // prints: "originalFunction" 16 17 let aClass = AwesomeClass.self 18 let originalMethod = class_getInstanceMethod(aClass, "originalFunction") 19 let swizzledMethod = class_getInstanceMethod(aClass, "swizzledFunction") 20 method_exchangeImplementations(originalMethod, swizzledMethod) 21 22 print(awesomeObject.originalFunction()) // prints: "swizzledFunction" 32 Bài NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P3) Thủ thuật Swift dành cho người bắt đầu Dọn dẹp đoạn mã không đồng Swift có cú pháp hoàn chỉnh việc viết tính hoàn thiện Chúng ta có đoạn mã hoàn chỉnh Objective-C, nhiên chúng xuất muộn so với lịch sử phát triển ngôn ngữ lập trình có số cú pháp sai sót, xem đây: [self loginViaHttpWithRequest:request completionBlockWithSuccess:^(LoginOperation *operation, id responseObject) { [self showMainScreen]; } failure:^(LoginOperation *operation, NSError *error) { [self showFailedLogin]; }]; Swift làm thứ trở nên dễ dàng nhiều với cú pháp đóng Bất kì phương thức đóng tham số sử dụng cú pháp Swift để gọi cách xác Bạn xem ví dụ sau: loginViaHttp(request) { response in if response.success { showMainScreen() } else { showFailedLogin() } 7} 33 Truy cập điều chỉnh đoạn code Chúng ta nên sử dụng sửa đổi truy cập thích hợp cách thường xuyên để gói gọn đoạn code Một đoạn code gói gọn hoàn hảo giúp ta hiểu đoạn mã tương tác với mà không cần phải nhớ quy trình hay hỏi người viết đoạn code Swift có máy quản lý truy cập mức private, internal public Tuy nhiên Swift lại khả sửa đổi quản lý truy cập, mà phổ biến lập trình hướng đối tuwọng Tại lại thế? Đơn giản thôi, mức protected không đem lại khả “bảo vệ” lớp phụ bỏ qua phương thức protected hay đoạn code public Phương thức Protected tối ưu hóa Swift việc bạn ghi đè đâu Cuối cùng, phương thức protected khuyến khích đóng gói tồi tệ ngăn chặn giúp đỡ từ lớp phụ việc truy cập vào thông tin mà lớp phụ truy cập vào Bạn đọc thêm trang Apple 34 Bài 10 NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P4) Thử nghiệm đặt giá trị với Playgrounds Một Playground hay gọi môi trường lập trình tương tác dành riêng cho Swift Chúng ta tạo playground để thử nghiệm xác nhận ý tưởng, học Swift, hay chia sẻ mẫu ý tưởng với Bạn hoàn toàn làm việc mà không cần phải tạo project Để tạo playground, đơn giản bạn cần mở Xcode chọn “Get Started with a playground” khởi động Xcode Bên cạnh bạn tạo playground bên Xcode: Khi tạo xong playground rồi, việc mà phải làm bắt đầu viết code nhìn thấy kết đoạn code viết phía bên tay phải hình: Có thể nói Playground cách tốt để khởi tạo, thử nghiệm hay chứng minh ý tưởng code mà không cần thiết phải bắt đầu dự án (project) Bài 11 NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P5) 35 Sử dụng tùy chọn cách an toàn Một thuộc tính tùy chọn thuộc tính có giá trị hay giá trị (nil) Chúng ta đóng gói tùy chọn theo kiểu ngầm định cách dựa theo tên tùy chọn ấn với dấu chấm than, chẳng hạn optionalProperty! Nhìn chung điều mà bạn cần phải tránh, dẫn với dấu chấm than “danger!” Trong vài trường hợp bạn sử dụng tùy chọn không đóng gói chấp nhận ví dụ IBOutlets, vốn mặc định tùy chọn không đóng gói ồi (khi nhấp chuột vào kéo chúng từ Interface Builder) UIKit giả, kết nối với Interface Builder Kết nối tùy chọn IBOutlets thiết lập vài điểm sau cài đặt, tất thuộc tính không tùy chọn phải có giá trị sau cài đặt theo quy luật Swift Một trường hợp khác lấy UIImage tên có sẵn mà thấy danh mục thuộc tính let imageViewSavvyNewYearsParty = UIImageView(image: UIImage(named: "Savvy2016.png")!) Đây giá trị mặc định thuộc tính khả quan tùy chọn không đóng gói Điều nói nên rằng, dấu chấm than “!” có ý nghĩa “Danger!” (Nguy hiểm) trường hợp cảnh báo cho ta biết nên cẩn thận với lỗi xảy xác nhận tên có khớp trước khởi chạy hay không Nhìn chung, phải sử dụng giá trị nil, phải đối mặt với nguy ứng dụng bị lỗi crash Các giá trị không đóng gói với dấu chấm than nói với người lập trình ứng dụng biết tùy chọn nil thời gian khởi chạy Đây ván rủi ro kịch bản, đó, tốt nế ubạn sử dụng If mẫu xác định tùy chọn có giá trị hay không if let name = user.name { print(name) } else { print("404 Name Not Found") 5} 36 Bài 12 NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P6) Bỏ lại NSNumber đằng sau Objective-C sử dụng nên tảng ngôn ngữ C nguyên thủy cho số nguyên, nên tảng Objective-C API cung cấp NSNumber để nhập vào box unbox Chúng ta code theo kiểu [array addObject:@(intPrimitive)] and [array[0] intValue] mà cần quay lại phía sau phía trước thành phần gốc kiểu đối tượng Swift lại không tồn chế vụng Thay vào đó, hoàn toàn thêm giá trị Int / Float / AnyObject vào thư viện mảng Swift Đây số kiểu biến Swift sử dụng NSNumber: • Swift: Objective-C • Int: [NSNumber integerValue] • Float: [NSNumber floatValue] • UInt: [NSNumber unsignedIntegerValue] • Double: [NSNumber doubleValue] • Bool: [NSNumber boolValue] Ta sử dụng NSNumber cho việc chuyển đổi kiểu biến khác Objective-C, nhiên Swift cách việc chuyển đổi giá trị sử dụng cấu trúc cho kiểu biến nhắm tới Ví dụ có userId số từ API, đóng gói NSNumber cần hiển thị userId chuỗi Objective-C, nhập vào [userId stringValue] Swift không không sử dụng NSNumber (ngoại trừ việc tương thích ngược với Objective-C), cấu trúc số Swift có giới hạn giống Objective-C Khuyến cáo: phải làm việc với NSNumber sở mã nguồn cầu nối Objective-C hay sở mã nguồn phụ thuộc vào thư viện cũ mà không cần phải đóng gói Swift Trong trường hợp này, NSNumber API không thay đổi Thay Swift, thực chuyển đổi tương đương với cấu trúc Ví dụ, userId biến Int cần chuỗi, tất cần làm đơn giản String(userId) để tạo chuyển đổi Việc làm rõ dễ dàng nhiều so với việc đóng gói hay mở gói NSNumber đa dạng chuyển đổi cung cấp NSNumber đem lại API đơn giản cách tuyệt vời 37 Giảm thiểu đoạn code mẫu với lập luận Với Swift, lập luận chức giá trị mặc định (nghiễm nhiên) Những lập luận mặc định giảm thiểu rối rắm đoạn code Nếu chức chọn cách sử dụng giá trj mặc định, chức gọi sớm lập luận mặc định bỏ qua Ví dụ: func printAlertWithMessage(message: String, title: String = "title") { print("Alert: \(title) | \(message)") } printAlertWithMessage("message") // prints: Alert: title | message printAlertWithMessage("message", title: "non-default title") // prints: Alert: non-default title | messagex 38 Bài 13 NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P7) Những thủ thuật lập trình Swift nâng cao Xác thực phương thức với Guard Việc xác nhận Guard Swift giúp tối thiểu hóa code giúp cho việc sử dụng code an toàn Một quy trình xác thực Guard áp dụng cho hay nhiều điều kiện điều kiện không thỏa mãn, phương thức block gọi Phương thức block đòi hỏi xác thực return, break, continue, hay throw kết thúc trình xử lý phương thức, hay nói cách khác, di chuyển ứng dụng khỏi phạm vi điều khiển Sử dụng phương thức xác thực với Guard giúp bạn giảm thiểu rối rắm đoạn code, tránh câu lệnh if/else lồng Bởi đoạn mã khóa lệnh else phương thức Guard cần phải chuyển ứng dụng tầm kiểm soát, việc làm an toàn việc đơn giản sử dụng câu lệnh if để gọi lệnh return gặp phải điều kiện không phù hợp Những lỗi tiềm tàng gặp phải thời gian biên soạn code Nếu điều kiện câu lệnh Guard thỏa mãn, giá trị tùy chọn xuất tầm kiểm soát class ProjectManager { func increaseProductivityOfDeveloper(developer: Developer) { guard let developerName = developer.name else { print("Papers, please!") return } let slackMessage = SlackMessage(message: "\(developerName) is a great iOS Developer!") 10 slackMessage.send() 11 } 12 } 39 Kiểm soát hoạt động ứng dụng với Defer Một câu lệnh defer giúp bạn trì hoãn lại trình xử lý đoạn code đặt mã lênh Điều có nghĩa việc làm gọn gàng đoạn code bạn đặt câu lệnh defer, đảm bảo gọi mà chức thoát tiến trình làm việc Nó giảm thiểu bước thừa gia tăng độ quan trọng, an toàn func deferExample() { defer { print("Leaving scope, time to cleanup!") } print("Performing some operation ") } // Prints: // Performing some operation 10 // Leaving scope, time to cleanup! 40 Bài 14 NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P8) Đơn giản hóa Singletons Việc sử dụng singleton ngôn ngữ lập trình chủ đề quan tâm, nhiên mô hình quen thuộc với hầu hết lập trình viên Việc thực thi singleton Objective-C bao gồm vài bước để chắn lớp singleton không tạo lần Trong lập trình Swift việc làm đơn giản nhiều Như bạn thấy sau đây, việc thực thi Objective-C cần nhiều gấp đôi số code so với Swift (quá lằng nhằng) Đỉnh cao việc việc sử dụng token không giúp cho việc mã hóa code tốt mà khiên cho việc thâm nhập vào nhớ trở nên khó khăn Objective-C @implementation MySingletonClass +(id)sharedInstance { static MySingletonClass *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; 10 } Swift class MySingletonClass { static let sharedInstance = MySingletonClass() 41 private init() { } 5} Giảm thiếu tối đa việc trùng lặp code với Protocol Extension Chúng ta mở rộng kiểu liệu với thư mục objective-c, nhiên việc làm tượng tự không gửi tới giao thức Swift cho phép thêm chức cho giao thức Với Swift, hoàn toàn mở rộng giao thức đơn lẻ (thậm chí nhữn giao thức thư viện mở), áp dụng chúng cho lớp mà thực thi giao thức Các phần mở rộng giao thức (protocol extensions) hoàn toàn có đủ sức mạnh để thay đổi toàn mô hình lập trình từ hướng đối tượng sang hướng giao thức Mấu chốt concept mà thêm vào cách mặc định thông qua giao thức thay lớp để giúp cho đoạn mã code sử dụng lại sau 42 Bài 15 NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P9) Tạo chức trợ giúp toàn cần Các biến chức toàn cầu thường coi “một điều tồi tệ”, nhiên thực tế hai giúp tạo dòng code gọn gàng Điều tồi tệ thực có lẽ phải Global State (câu lệnh toàn cầu) Các chức toàn cầu thường cần câu lệnh toàn cầu để hoạt động, bạn dễ dàng nhận chúng lại coi tồi tệ Sau số ví dụ chức trợ giúp Grand Central Dispatch mà không hoạt động câu lệnh toàn cầu, nhiều hay cú pháp dễ dàng Sau đây, thêm chức dispatch_after đưa theo dạng Swift import Foundation /** Executes the closure on the main queue after a set amount of seconds - parameter delay: Delay in seconds - parameter closure: Code to execute after delay */ func delayOnMainQueue(delay: Double, closure: ()->()) { 10 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), clo 11 } 12 13 /** 14 Executes the closure on a background queue after a set amount of seconds 15 16 - parameter delay: Delay in seconds 17 - parameter closure: Code to execute after delay 18 */ 19 func delayOnBackgroundQueue(delay: Double, closure: ()->()) { 20 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_global_queue(QO 43 21 } Sau ví dụ cho bạn dễ hình dung chức Wrapper có cấu trúc sao: delayOnBackgroundQueue(5) { showView() 3} Và ví dụ chức Unwrapped trông nào: dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_global_queue(QOS_CL showView() } Wrapping chức ngôn ngữ C với cú pháp Swift khiến đoạn code dễ hiểu Hãy tìm hiểu chức mà bạn yêu thích triển khai Sự trì chức tương lai hay miễn giữ trách nhiệm với việc đặt tên xác cho phương thức Nếu thay đổi chữ ký phương thức thành delay(delay: Double, closure:()->()), ví dụ tên phương thức trách nhiệm dispatch_after đòi hỏi tiến trình GCD, tên không đem lại cho dấu hiệu tiến trình ta sử dụng Tuy nhiên, đoạn code hoạt động quy ước thiết lập sẵn việc tính toán tất phương thức chủ đề không nhân biết tên hay comments, delay(delay: Double, closure: () -> ()) tên phương thức xác Bất kể ta đặt tên cho chứng trợ giúp mục đích tiết kiệm thời gian cho cách wrapping đoạn code mẫu khiến chúng dễ đọc 44 BÀI 16 NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (PHẦN CUỐI) Mở rộng khả thu thập Swift thêm số phương thức giúp quản lý chỉnh sửa sưu tập tạm thời Những phương thức sưu tập chịu ảnh hưởng từ ngôn ngữ chức CHúng ta sử dụng sưu tập để lưu trữ nhều giá trị vào cấu trúc liệu đơn lẻ thường xuyên quản lý chỉnh sửa chúng Những chức xây dựng thư viện mở Swift giúp làm đơn giản hóa tác vụ thông thường Để giải thích rõ chức sau, sử dụng ví dụ sau: let ints = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] • Map đóng giá trị sưu tập, sau quay trở lại mảng map, kết điền với giá trị map Sau chuyển dổi mảng Int sang mảng String: let strings = ints.map { return String($0) } print("strings: \(strings)") // prints: strings: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] • Filter thiết đặt chức tới giá trị mang return giá trị Bool Những giá trị quy “true” quy lại kết mảng giá trị quy “false” ngược lại Sauđây lọc số lẻ từ mảng ints: let evenInts = ints.filter { return ($0 % == 0) } print("evenInts: \(evenInts)") // prints: evenInts: [0, 2, 4, 6, 8] • reduce lại có phần phức tạp so với map filter, nhiên hiệu phủ nhận, có ích việc học curve Đối số thứ giá trị lược bỏ (ở trường hợp sau 0) Đối số thứ chức có quyền truy cập vào giá trị lược bỏ trước giá trị mảng Trong ví dụ sau,chức is + thêm vào giá trị trước giá trị mảng cách dễ dàng 45 let reducedInts = ints.reduce(0, combine: +) print("reducedInts: \(reducedInts)") // prints: reducedInts: 45 // defined another way: let reducedIntsAlt = ints.reduce(0) { (previousValue: Int, currentValue: Int) -> Int in return previousValue + currentValue 8} print("reducedIntsAlt: \(reducedIntsAlt)") // prints: reducedIntsAlt: 45 Cùng với thủ thuật map, filter reduce, hoàn toàn giảm thiểu tối đa công sức phải bỏ để lọc hoạt động sưu tập trung giúp tăng khả đọc chỉnh sửa cho lập trình viên sử dụng code sau 46 ... niệm cách sử dụng lập trình với Swift Swift thực ngôn ngữ vô linh hoạt cung cấp cho bạn thêm nhiều tính mẻ mà ngôn ngữ lập trình khác Chúc bạn học tốt 10 BÀI CĂN BẢN VỀ LẬP TRÌNH SWIFT (P3) Ở hai... mạnh Swift phần BÀI CƠ BẢN VỀ NGÔN NGỮ SWIFT (P2) Ở trước tìm hiểu khái niệm lập trình swift Và hôm tìm hiểu số hàm (function), closure lớp (class) Kết thúc học hôm bạn nắm điều lập trình swift. .. KHIỂN] – CẤU TRÚC LẶP TRONG LẬP TRÌNH SWIFT Chào bạn, hôm tìm hiểu cấu trúc lặp lập trình Swift, cách hoạt động cách dùng hàm điều khiển Swift Vòng lặp mã lệnh mà chương trình thực lặp lặp lại nhiều

Ngày đăng: 15/08/2017, 19:34

Từ khóa liên quan

Mục lục

  • LẬP TRÌNH SWIFT

  • bài 1. SƠ LƯỢC VỀ NGÔN NGỮ LẬP TRÌNH SWIFT

  • Bài 2. CƠ BẢN VỀ NGÔN NGỮ SWIFT (P2)

  • Bài 3. CĂN BẢN VỀ LẬP TRÌNH SWIFT (P3)

  • Bài 4. SỬ DỤNG KIỂU ENUM TRONG LẬP TRÌNH SWIFT

  • Bài 5. [HÀM ĐIỀU KHIỂN] – CẤU TRÚC LẶP TRONG LẬP TRÌNH SWIFT

    • 1. Vòng lặp for

    • 2. Vòng lặp for-in

    • 3. Vòng lặp While

    • 4. Vòng lặp Do-While

    • Bài 6. [HÀM ĐIỀU KHIỂN] – CẤU TRÚC RẼ NHÁNH TRONG LẬP TRÌNH SWIFT

      • 1. Hàm điều kiện If và If-Else

      • Bài 7. NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P1)

        • 1. Gia tăng khả năng đọc của hằng.

        • 2. Tránh NSObject và @objc để gia tăng khả năng hoạt động

        • Bài 8. NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P2)

          • Sử dụng phương thức Swizzling trong Swift

          • Bài 9. NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P3)

            • Thủ thuật Swift dành cho người mới bắt đầu

              • Dọn dẹp những đoạn mã không đồng bộ

              • Truy cập điều chỉnh nhưng đoạn code của chúng ta

              • Bài 10. NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P4)

                • Thử nghiệm và đặt giá trị với Playgrounds

                • Sử dụng các tùy chọn một cách an toàn

                • Bài 12. NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P6)

                  • Bỏ lại NSNumber đằng sau

                  • Giảm thiểu những đoạn code mẫu với các lập luận nghiễm nhiên

                  • Bài 13. NHỮNG THỦ THUẬT CẦN BIẾT TRONG LẬP TRÌNH SWIFT (P7)

                    • Những thủ thuật lập trình Swift nâng cao

                      • Xác thực các phương thức với Guard

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan