Tôi có đối tượng tùy chỉnh được gọi là Trường. Tôi về cơ bản sử dụng nó để xác định một trường đơn trong một biểu mẫu.Swift nếu để đánh giá thành công trên Tùy chọn (nil)
class Field {
var name: String
var value: Any?
// initializers here...
}
Khi người dùng gửi các hình thức, tôi xác nhận mỗi Field
đối tượng để đảm bảo chúng chứa các giá trị hợp lệ. Một số lĩnh vực không phải vì vậy tôi đôi khi cố tình thiết lập nil
đến value
bất động sản như thế này:
field.value = nil
Điều này dường như đặt ra một vấn đề khi tôi sử dụng một if-hãy để xác định xem một lĩnh vực là con số không hay không.
if let value = field.value {
// The field has a value, ignore it...
} else {
// Add field.name to the missing fields array. Later, show the
// missing fields in a dialog.
}
tôi đặt breakpoint ở trên if-else và khi field.value
đã được cố tình thiết lập để con số không, nó đi qua các khối if-let, không phải là ai khác. Tuy nhiên, đối với các trường có số field.value
tôi không được khởi tạo và chưa được gán, chương trình sẽ chuyển đến khối khác.
tôi đã cố gắng in ra field.value
và value
bên trong khối if-phép:
if let value = field.value {
NSLog("field.value: \(field.value), value: \(value)")
}
Và đây là những gì tôi nhận được:
field.value: Tùy chọn (không), giá trị: nil
Vì vậy, tôi nghĩ rằng có thể với tùy chọn, đó là một điều không được khởi tạo và một điều khác để có valu e of nil. Nhưng thậm chí thêm một cái khác nếu bên trong if-let sẽ không làm cho trình biên dịch hài lòng:
if let value = field.value {
if value == nil { // Cannot invoke '==' with an argument list of type '(Any, NilLiteralConvertible)'
}
}
Làm cách nào để giải quyết vấn đề này? Tôi chỉ muốn kiểm tra xem field.value
có phải là nil
hay không.
Không thể sao chép. Bạn sử dụng phiên bản Xcode nào? –
Xcode 6 GM. Cố gắng khởi động lại nó, vẫn không có may mắn. :( –
Bạn có thể đăng một ví dụ hoàn chỉnh khép kín thể hiện được vấn đề không? –