tôi đã xác định một giao thức với một phương pháp để trả lại một tuple:Trở tuple Từ Đại biểu (Giá trị của loại tùy chọn không nào)
protocol SMCalculatorDelegate {
func numbersToAdd() -> (Int, Int)
}
Khi tôi cố gắng để gọi đây là so với phương pháp đại biểu trong lớp học của tôi như thế này :
class SMCalculator: NSObject {
var delegate : SMCalculatorDelegate?
func add() {
let myTuple : (n1: Int, n2: Int) = delegate?.numbersToAdd()
}
}
tôi nhận được lỗi sau trên dòng bắt đầu let myTuple...
đề cập đến phần .numbersToAdd()
đó dòng mã.
"Value of optional type '(Int, Int)?' not unwrapped; did you mean to use '!' or '?'?"
Tại sao điều này không hoạt động khi tôi có thể trích xuất bộ dữ liệu không có lỗi như thế này?
let tuple = delegate?.numbersToAdd()
println(tuple) //Prints (5,5)
Bạn là chính xác, điều này loại bỏ các lỗi xây dựng , và logic có ý nghĩa ... Tuy nhiên tôi vẫn còn gặp khó khăn khi truy cập vào các giá trị riêng lẻ của bộ dữ liệu. Nếu tôi đã đọc các tài liệu một cách chính xác i * nên * chỉ đơn giản sau đó có thể đi 'println (myTuple.n1)' nhưng điều này làm tăng lỗi ''(n1: Int, n2: Int)?' không có thành viên có tên 'n1'' – Sammio2
Tôi đã cập nhật giải pháp của mình để hiển thị cách truy cập các biến tùy chọn. Bởi vì họ có thể bằng nil bạn cần phải sử dụng '!' nhà điều hành để unwrap họ, mà nói với trình biên dịch mà bạn chắc chắn rằng giá trị là không bao giờ nil tại thời điểm này trong mã, hoặc bạn sử dụng cấu trúc nếu để nắm bắt các trường hợp đó giá trị là số không. – Jann
Ồ vâng tất nhiên !! Vì tuple là tùy chọn nên các giá trị nằm trong tuple. Cảm ơn bạn đã giúp đỡ! Não của tôi được chiên vào cuối một tuần dài! – Sammio2