Một tùy chọn là đặt hoặc không đặt (not nil hoặc nil) ... để lại cho chúng tôi một quyết định quan trọng. "Chúng ta nên viết mã của mình như thế nào để nó có thể hoạt động chính xác cho cả 2 trạng thái?". Cách chúng tôi unwrap các tùy chọn là những gì quyết định rằng đối với chúng tôi.
Có một số cách tiếp cận mà bạn có thể sử dụng để chống lại một tùy chọn không được thiết lập.
- Tai nạn!
- Mặc định giá trị thành một cái gì đó - nếu nó chưa được đặt.
- Không thành công một cách duyên dáng tức là không làm gì cả, nhưng cũng nếu giá trị đã được đặt, thì hãy gán nó.
- Thất bại một cách duyên dáng tức là không làm gì cả, tuy nhiên nếu giá trị đã được đặt ... hãy làm gì đó (nó chỉ hơn một nhiệm vụ duy nhất).
Dưới đây là 4 cách tiếp cận
Việc sử dụng bắt buộc mở gói sẽ bị lỗi nếu bạn không có giá trị. Bạn sẽ muốn làm điều này nếu có giá trị đó là quan trọng hàng đầu, ví dụ như tiêu đề của một bộ phim (mọi bộ phim PHẢI có tên). !
được sử dụng để mở gói cưỡng bức.
movieTitle = movie.title!
Sử dụng liên kết nil là một cách khác sẽ cung cấp cho bạn nhiều quyền kiểm soát hơn , có nghĩa là nó sẽ không sụp đổ nếu giá trị không được đặt, cũng như 'không đặt nó không có gì' nếu nó không được đặt ... nó sẽ làm những gì bạn nói với nó để làm ví dụ, nó sẽ mặc định / đặt tên phim thành unsitled_movie nếu không có tên nào được đặt. ??
được sử dụng cho liên kết nil.
var movieTitle = movie.title ?? "untitled_Movie"
Sử dụng Chuỗi tùy chọn sẽ không làm gì nếu bạn không có giá trị và sẽ đặt giá trị nếu bạn có giá trị. Bạn làm điều này cho một cái gì đó mà việc đặt giá trị của nó không có tầm quan trọng quan trọng, ví dụ như tên của đại lý của diễn viên của bạn . ?
được sử dụng cho chuỗi tùy chọn.
let agent = movie.leadActor?.agent
let agent = movie.leadActor!.agent
Việc sử dụng if-let
(hoặc guard
là hai loại ràng buộc tùy chọn khác nhau ) sẽ cung cấp cho bạn nhiều quyền kiểm soát hơn , nó sẽ không bị lỗi nếu giá trị không được đặt. Nếu giá trị được đặt, thì bạn có thể làm gì đó. Nếu nó chưa được đặt thì bạn có thể thêm một else
câu lệnh.
if let supportingActor = movie.supportingActor{
print(" The supporting actor is \(supportingActor)}
Đây là cách mở gói được sử dụng phổ biến nhất, vì việc mở gói cưỡng bức hơi không được khuyến khích. Để biết thêm thảo luận về lý do tại sao nó không được khuyến khích, hãy xem tại đây . Để có sự so sánh tốt giữa guard
và if-let
xemguard vs. if-let
Lưu ý phụ:
Ràng buộc tùy chọn và chuỗi tùy chọn thường được sử dụng cùng nhau:
if let agent = movie.leadActor?.agent {
ContactInfo = agent.phoneNumber
}