Kurze Antwort:
Bool
ist der native Swift Typ für Wahrheitswerte.
DarwinBoolean
ist das Swift-Mapping des "historischen" C-Typs .
ObjCBool
ist das Swift-Mapping des Objective-C-Typs BOOL
.
Sie würden Bool
in Ihrem Swift Code verwenden, es sei denn, eine der anderen Arten für die Interoperabilität mit bestehenden Core Foundation oder Objective-C-Funktionen erforderlich ist.
Mehr über DarwinBoolean
: DarwinBoolean
wird in Swift definiert als
/// 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)
}
und ist der Swift-Mapping der "historischen" C Typ Boolean
von 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;
Siehe auch den Xcode 7 R elease Hinweise:
Der Typ Boolean in MacTypes.h als Bool importiert in Kontexten, dass zwischen Swift und Objective-C-Typen überbrücken lassen.
In Fällen, in denen die Darstellung von Bedeutung ist, ist Boolean als eigenständiger DarwinBoolean Typ importiert, das ist BooleanLiteralConvertible und kann unter den Bedingungen (ähnlich wie der ObjCBool Typ) verwendet werden. (19013551)
Als Beispiel können die Funktionen
void myFunc1(Boolean b);
void myFunc2(Boolean *b);
als
public func myFunc1(b: Bool)
public func myFunc2(b: UnsafeMutablePointer<DarwinBoolean>)
In myFunc1
zu Swift importiert eine automatische Konvertierung zwischen dem nativen Swift Typ Bool
und der Mac-Typ . Dies ist nicht möglich in myFunc2
, weil die Adresse einer Variablen herumgereicht wird, hier DarwinBoolean
ist genau der Mac-Typ .
In früheren Versionen von Swift - wenn ich mich richtig erinnere - die abgebildet Typ Boolean
genannt wurde, und wird zu DarwinBoolean
später umbenannt.
Mehr über ObjCBool
: ObjCBool
ist das Swift-Mapping des Objective-C-Typs BOOL
, dies kann signed char
oder den C/C++ bool
Typ sein, abhängig von der Architektur. Zum Beispiel kann die NSFileManager
Methode
- (BOOL)fileExistsAtPath:(NSString *)path
isDirectory:(BOOL *)isDirectory
als
func fileExistsAtPath(_ path: String,
isDirectory isDirectory: UnsafeMutablePointer<ObjCBool>) -> Bool
Hier der BOOL
Rückkehr zu Swift importierten Wert Bool
automatisch umgewandelt wird, aber die (BOOL *)
als UnsafeMutablePointer<ObjCBool>
gehalten, weil es die ist Adresse einer Variablen.