Cập nhật 3/23/2016 Tôi vừa thử nghiệm mã mẫu ban đầu của mình bên dưới và tất cả biên dịch đều tốt trong XCode 7.3. Có vẻ như XCTAssertNil đã được cập nhật trên đường đi để có một biểu thức kiểu () throws -> Any?
Do đó câu hỏi và câu trả lời này có thể không còn cần thiết nữa (ngoại trừ một thời gian với các phiên bản cũ hơn của trình biên dịch.)Làm thế nào để sử dụng XCTAssertNil với các cấu trúc tùy chọn?
Tôi đang viết các bài kiểm tra đơn vị đầu tiên của mình trong XCode với XCTest. Tôi không chắc chắn làm thế nào người ta có thể tận dụng lợi thế của XCTAssertNil vì nó dường như chỉ biên dịch khi sử dụng một số loại. Nó xuất hiện nó sẽ làm việc với các tùy chọn được tạo ra từ các lớp và các thành phần nguyên thủy được xây dựng sẵn, nhưng không phải là các cấu trúc. Làm thế nào sẽ đi về bằng cách sử dụng phương pháp này?
Đối với cấu trúc trình biên dịch cung cấp cho các lỗi sau (giả sử 'SimpleStruct' là tên của loại của bạn):
'SimpleStruct' is not identical to 'AnyObject'
Dưới đây là một lớp học thử nghiệm đơn giản để minh họa một số loại mà biên dịch ổn và khác là rằng don 't.
import Cocoa
import XCTest
struct SimpleStruct {
}
class SimpleClass {
}
class Tests: XCTestCase {
func testl() {
var simpleStruct:SimpleStruct? = nil;
var simpleClass:SimpleClass? = nil;
var i:Int? = nil;
var s:String? = nil;
var tuple:(Int,String)? = nil;
XCTAssertNil(simpleStruct); // compile error
XCTAssertNil(simpleClass); // OK
XCTAssertNil(i); // OK
XCTAssertNil(s); // OK
XCTAssertNil(tuple); // compile error
}
}
Vâng, có vẻ như XCTest cần một ít công việc. Bây giờ công việc của tôi xung quanh hoạt động tốt cho tôi. Tôi sẽ cập nhật thông báo để có nhiều thông tin hơn trong trường hợp lỗi thay vì mặc định thành chuỗi rỗng. –
Điều này không còn hoạt động trong Xcode 7.3 – Jeef
Cảm ơn @Jeef. Tôi sẽ cập nhật câu trả lời của tôi để gọi ghi chú này. –