TL; DR
popViewController(animated:)
trả về UIViewController?
và trình biên dịch sẽ đưa ra cảnh báo đó vì bạn không nắm bắt được giá trị. Giải pháp là gán nó cho dấu gạch dưới:
_ = navigationController?.popViewController(animated: true)
Thay đổi nhanh 3
Trước Swift 3, tất cả các phương thức đều có "kết quả có thể loại bỏ" theo mặc định. Không có cảnh báo sẽ xảy ra khi bạn không nắm bắt được phương thức trả về.
Để thông báo cho trình biên dịch rằng kết quả sẽ được ghi lại, bạn phải thêm @warn_unused_result
trước khi khai báo phương thức. Nó sẽ được sử dụng cho các phương thức có dạng biến đổi (ví dụ sort
và sortInPlace
). Bạn sẽ thêm @warn_unused_result(mutable_variant="mutableMethodHere")
để nói với trình biên dịch của nó.
Tuy nhiên, với Swift 3, hành vi bị lật. Tất cả các phương thức hiện cảnh báo rằng giá trị trả về không bị bắt. Nếu bạn muốn nói với trình biên dịch rằng cảnh báo là không cần thiết, bạn thêm @discardableResult
trước khi khai báo phương thức.
Nếu bạn không muốn sử dụng giá trị trả về, bạn phải thông báo rõ ràng cho trình biên dịch bằng cách gán nó cho dấu gạch dưới:
_ = someMethodThatReturnsSomething()
Động lực để thêm điều này vào Swift 3:
- Ngăn ngừa các lỗi có thể xảy ra (ví dụ: sử dụng
sort
suy nghĩ nó sẽ sửa đổi bộ sưu tập)
- Mục đích rõ ràng là không nắm bắt hoặc cần phải nắm bắt kết quả cho các cộng tác viên khác
API UIKit dường như đứng sau về điều này, không thêm vào việc @discardableResult
sử dụng hoàn toàn bình thường (nếu không phổ biến hơn) popViewController(animated:)
mà không nắm bắt giá trị trả về.
Đọc thêm