2015-04-14 17 views
22

Tôi đã nhận được vào một thói quen khá tốt của tuyên bố và sử dụng chuỗi liên tục cho những thứ như tên NSNotification. Tôi tuyên bố họ như vậy:Nullability Mục tiêu-C: Đủ điều kiện liên tục Strings

extern NSString * const ABCAwesomeThingHappenedNotification; 

Với sự ra đời của Xcode 6.3 và Swift 1.2, tôi sẽ trở lại và các lớp học kiểm toán Objective-C interop với Swift sử dụng mới nonnull, nullable, và null_unspecified vòng loại.

Khi thêm vòng loại đến một tiêu đề đó cũng có chuỗi tĩnh bên ngoài có thể nhìn thấy, tôi nhận được cảnh báo sau đây:

cảnh báo: con trỏ là mất tích một loại nullability specifier (__nonnull hoặc __nullable)

Hmm. Đó là khó hiểu/thú vị. Ai đó có thể giải thích lý do đằng sau thông điệp này? Khi sử dụng ABCAwesomeThingHappenedNotification trong Swift, nó không bao giờ gợi ý rằng đó là Chuỗi tùy chọn hoặc Chuỗi không được khai thác ngầm hoàn toàn.

+1

Câu hỏi khác nhau, nhưng cũng có thể thú vị trong ngữ cảnh này: [Swift 1.2 biến tùy chọn bên ngoài?] (Http://stackoverflow.com/questions/29612639/swift-1-2-optional-external-variable). –

+0

Liên quan: [Cách tạo các phương thức lớp phù hợp với giao thức được chia sẻ giữa Swift và Objective-C?] (Http://stackoverflow.com/questions/29399871/how-to-create-class-methods-that-conform- to-a-protocol-shared-between-swift-và) (nhưng đây không phải là bản sao) – nhgrif

Trả lời

7

Trong thực hiện của bạn, bạn có thể định nghĩa:

NSString * const ABCAwesomeThingHappenedNotification = @"ABCAwesomeThingHappenedNotification"; 

trong trường hợp con trỏ rõ ràng là nonnull. Tuy nhiên, đây cũng là hợp lệ:

NSString * const ABCAwesomeThingHappenedNotification = nil; 

mà phải được xem xét nullable vì con trỏ luôn luôn là một con trỏ null.

(The khởi động rõ ràng để nil là không cần thiết vì đây xảy ra ngầm nếu không có giá trị ban đầu được cung cấp, nhưng rõ ví dụ này.)

+0

Đây là câu trả lời đúng – Lneuner

27

Tôi đồng ý rằng có specifier này không nên được yêu cầu nhưng đây là cú pháp

extern NSString * const MyConstant; 

extern NSString * __nonnull const MyConstant; 
+0

@http: //stackoverflow.com/users/2791584/lneuner: thực sự, vì chúng tôi là nói về giao diện, đây là câu trả lời đúng. – SwiftArchitect

+0

Câu hỏi đặt ra lý do đằng sau cảnh báo, chứ không phải cú pháp để sửa lỗi. –

+1

Tôi đồng ý nhưng khi bạn không biết câu trả lời thì sửa chữa giống như một câu trả lời. –

Các vấn đề liên quan