2015-09-19 13 views
5

Tôi đã đọc Optional Chaining chương của Ngôn ngữ lập trình Swift (swift2) của apple. Trong chương này, không có đề cập đến một dấu hỏi tùy chọn sau một tên hàm nhưng trước dấu ngoặc đơn bên trái.Dấu chấm hỏi tùy chọn sau tên hàm

Nhưng tôi thấy mã nhanh chóng sau đây từ this tài liệu của Apple (phần 'Phái đoàn'):

//There is a question mark right after 'window' 
    if let fullScreenSize = myDelegate?.window?(myWindow, willUseFullScreenContentSize: mySize) { 
     print(NSStringFromSize(fullScreenSize)) 
    } 

có nghĩa là gì của việc có một dấu hỏi sau khi một tên hàm nhưng trước khi ngoặc trái?

+0

Xem sách của tôi: http://www.apeth.com/swiftBook/ch04.html#SECoptionalProtocol và http://www.apeth.com/swiftBook/ch04.html#SECsuppressing – matt

Trả lời

9

Có hai tình huống mà nó này được sử dụng:

  • Một phương pháp giao thức được bản thân đánh dấu optional, vì vậy chúng tôi không biết liệu người áp dụng giao thức thực hiện phương thức này.

  • Chúng tôi đang gửi thư tới AnyObject. Chúng tôi có thể gửi bất kỳ tin nhắn lớp đã biết nào đến AnyObject - nó sẽ loại bỏ kiểm tra kiểu - nhưng sau đó, một lần nữa, chúng tôi không biết liệu đối tượng thực tế có triển khai phương pháp này hay không.

Vì vậy, dấu hỏi điều này có nghĩa để gửi thông điệp này tùyan toàn. Nếu chỉ ra rằng người nhận thực hiện không triển khai, không gửi thư và trả lại số không. Nếu người nhận không triển khai, gửi tin nhắn, nhưng bây giờ chúng tôi phải kết thúc bất kỳ kết quả nào trong Tùy chọn (vì nếu không chúng tôi không thể trả lại nil trong trường hợp đầu tiên).

Phía sau hậu trường, Mục tiêu-C respondsToSelector: đang được gọi. Do đó, mẫu này chỉ có sẵn nếu người nhận được tiếp xúc với Objective-C. Về cơ bản, đây là một tính năng ngôn ngữ Objective-C thể hiện trong Swift viết tắt.

0

Điều này được sử dụng khi phương thức giao thức là tùy chọn và có thể không được triển khai trên đối tượng. (Trong trường hợp này, các tùy chọn window:willUseFullScreenContentSize: phương pháp từ các giao thức NSWindowDelegate)

Các vấn đề liên quan