Các từ khóa như sử dụng để làm cả hai upcasts và downcasts:
// Before Swift 1.2
var aView: UIView = someView()
var object = aView as NSObject // upcast
var specificView = aView as UITableView // downcast
Các bị ném lên trời, đi từ một lớp được thừa kế một lớp cơ sở, có thể được kiểm tra tại thời gian biên dịch và sẽ không bao giờ thất bại.
Tuy nhiên, quá trình phát có thể không thành công do bạn không thể luôn chắc chắn về lớp học cụ thể. Nếu bạn có UIView, có thể đó là UITableView hoặc có thể là UIButton. Nếu downcast của bạn đi đúng loại - tuyệt vời! Nhưng nếu bạn tình cờ chỉ định loại sai, bạn sẽ gặp lỗi thời gian chạy và ứng dụng sẽ gặp sự cố.
Trong Swift 1.2, lịch phát sóng phải là tùy chọn với? hoặc "bắt buộc phải có" với như !. Nếu bạn chắc chắn về loại, thì bạn có thể ép buộc diễn viên bằng! tương tự như cách bạn sẽ sử dụng một tùy chọn ngầm-quà nào:
// After Swift 1.2
var aView: UIView = someView()
var tableView = aView as! UITableView
Các dấu chấm than làm cho nó hoàn toàn rõ ràng rằng bạn biết những gì bạn đang làm và rằng có một cơ hội thứ sẽ gặp rắc rối hay nếu bạn đã vô tình trộn lẫn lên các loại của bạn!
Như mọi khi, như? với tùy chọn ràng buộc là cách an toàn nhất để đi:
// This isn't new to Swift 1.2, but is still the safest way
var aView: UIView = someView()
if let tableView = aView as? UITableView {
// do something with tableView
}
Got này từ một trang web: SOURCE
Cảm ơn Jacobson! Một câu hỏi bổ sung - đôi khi tôi bị nhầm lẫn giữa downcasting với một phiên bản Int "chuyển đổi" thành Float. Nếu bạn có giá trị Số nguyên nhưng bạn muốn chuyển đổi thành Float, bạn có bị downcast hoặc chuyển đổi không? Điều gì về một Float với một giá trị số nguyên? (ví dụ: 2.0) – Alex