mam zdefiniowanej protokół z metodą powrotu krotki:Wracając krotka Od Delegata (wartość opcjonalnego typu nie nieowiniętym)
protocol SMCalculatorDelegate {
func numbersToAdd() -> (Int, Int)
}
Kiedy próbuję nazwać przeciwko metodzie delegata w mojej klasie jak ta :
class SMCalculator: NSObject {
var delegate : SMCalculatorDelegate?
func add() {
let myTuple : (n1: Int, n2: Int) = delegate?.numbersToAdd()
}
}
otrzymuję następujący błąd na linii startu let myTuple...
odsyłający do sekcji .numbersToAdd()
tej linii kodu.
"Value of optional type '(Int, Int)?' not unwrapped; did you mean to use '!' or '?'?"
Dlaczego to nie działa, gdy mogę wyodrębnić krotkę bez takiego błędu?
let tuple = delegate?.numbersToAdd()
println(tuple) //Prints (5,5)
Masz rację, to usuwa błąd kompilacji , a logika ma sens ... Jednak wciąż mam problemy z dostępem do poszczególnych wartości krotki. Jeśli czytałem dokumenty poprawnie i * powinno * po prostu wtedy można przejść do 'println (myTuple.n1)' ale to podnosi błąd ''(n1: Int, n2: Int)?" nie ma członka o nazwie "n1", – Sammio2
Zaktualizowałem moje rozwiązanie, aby pokazać, jak uzyskać dostęp do opcjonalnych zmiennych. Ponieważ mogą przez zero użyć "!" operator, aby je rozwinąć, co mówi kompilatorowi, że jesteś pewny, że wartość nigdy nie jest zerowa w tym momencie kodu, lub używasz struktury if, aby wychwycić przypadek, że wartość jest zerowa. – Jann
O tak, oczywiście !! Ponieważ krotka jest opcjonalna, tak samo są wartościami w krotce. Dzięki za pomoc! Mój mózg jest smażony pod koniec długiego tygodnia! – Sammio2