Câu trả lời ngắn:
Bool
là loại Swift mẹ đẻ cho các giá trị thật.
DarwinBoolean
là ánh xạ Swift của loại C "lịch sử" Boolean
.
ObjCBool
là ánh xạ Swift của loại Mục tiêu-C BOOL
.
Bạn sẽ sử dụng Bool
trong mã Swift của bạn trừ khi một trong những loại khác là cần thiết cho khả năng tương tác với Quỹ lõi hiện có hoặc chức năng Objective-C.
Thông tin thêm về DarwinBoolean
: DarwinBoolean
được định nghĩa trong Swift như
/// The `Boolean` type declared in MacTypes.h and used throughout Core
/// Foundation.
///
/// The C type is a typedef for `unsigned char`.
public struct DarwinBoolean : BooleanType, BooleanLiteralConvertible {
public init(_ value: Bool)
/// The value of `self`, expressed as a `Bool`.
public var boolValue: Bool { get }
/// Create an instance initialized to `value`.
public init(booleanLiteral value: Bool)
}
và là ánh xạ Swift của "lịch sử" C loại Boolean
từ MacTypes.h:
/********************************************************************************
Boolean types and values
Boolean Mac OS historic type, sizeof(Boolean)==1
bool Defined in stdbool.h, ISO C/C++ standard type
false Now defined in stdbool.h
true Now defined in stdbool.h
*********************************************************************************/
typedef unsigned char Boolean;
Xem thêm Xcode 7 R elease Ghi chú:
Loại Boolean trong MacTypes.h được nhập làm Bool trong ngữ cảnh cho phép bắc cầu giữa các loại Swift và Objective-C.
Trong trường hợp biểu thị quan trọng, Boolean được nhập làm kiểu DarwinBoolean riêng biệt, là BooleanLiteralConvertible và có thể được sử dụng trong điều kiện (giống như loại ObjCBool). (19013551)
Như một ví dụ, các chức năng
void myFunc1(Boolean b);
void myFunc2(Boolean *b);
được nhập khẩu để Swift như
public func myFunc1(b: Bool)
public func myFunc2(b: UnsafeMutablePointer<DarwinBoolean>)
Trong myFunc1
có một chuyển đổi tự động giữa mẹ đẻ Swift loại Bool
và Mac Type Boolean
. Điều này không thể thực hiện trong myFunc2
vì địa chỉ của biến số được chuyển qua, tại đây DarwinBoolean
chính xác là Loại Mac Boolean
.
Trong các phiên bản trước của Swift - nếu tôi nhớ chính xác - loại ánh xạ được gọi là Boolean
và đã được đổi tên thành DarwinBoolean
sau đó. Nhiều
về ObjCBool
: ObjCBool
là ánh xạ Swift của Objective-C loại BOOL
, này có thể signed char
hoặc C/C++ bool
loại, tùy thuộc vào kiến trúc . Ví dụ, phương pháp NSFileManager
- (BOOL)fileExistsAtPath:(NSString *)path
isDirectory:(BOOL *)isDirectory
được nhập khẩu để Swift như
func fileExistsAtPath(_ path: String,
isDirectory isDirectory: UnsafeMutablePointer<ObjCBool>) -> Bool
Ở đây, giá trị BOOL
trở lại được chuyển thành Bool
tự động, nhưng (BOOL *)
được giữ như UnsafeMutablePointer<ObjCBool>
bởi vì nó là địa chỉ của một biến.