ç§ã®æèŠã§ã¯ãçŸæç¹ã§ã®C ++ã¯ãããªãã奜ããªããšãè¡ãããšãã§ããæãæ·±å»ãªéçºèšèªã§ãããCããããšã¬ã¬ã³ãã§ãã ã ãããããSwiftèšèªã LLDBãªã©ãæžãããã®åºç€ãšããŠéžã°ããã®ã¯åœŒã ã£ããšæããŸãã ããã§ã¯Swiftèšèªã®æ©èœã確èªããã«ãããã€ãã®ãã€ã³ãã匷調ããŸããä»ã®ãã¹ãŠã¯å°éã®ããã¥ã¡ã³ãã«èšèŒãããŠããŸãã ç§ã®æèŠã§ã¯ãåå¿è ããã°ã©ããŒã«ãšã£ãŠã¯ã¯ããã«æ©èœçã§ç°¡åã§ããå®éãããã¯éçºã®ç®æšã®1ã€ã§ãããæ°ããéçºè ã®ãšã³ããªãŒãããå€ãäžããããšã§ãã ç¹ã«ç°¡æœãªCïŒãŸãã¯Javaã§æžããå Žåã¯ç¹ã«ãObjective-Cã®æ¬åŒ§ãåããŠç¥ã£ãåŸãã©ã®ããã«é«ªãç«ãŠãããèŠããŠãããŠãã ããã ãã¡ãããç§ã®æèŠã§ã¯ãç®ç«ã€ããã«ããã°ã©ããŒãæãã€ããã®ã¯æŽç·ŽãããŠããªãã£ãããã§ã¯ãããŸããã ããããããããã¹ãŠã®æè©ã§ããããžãã¹ã«åãæãããŸãããã æåã«ãObjectice Cã®ç¥ç¶ã®åºæ¬ã¯ã©ã¹ãåæããSwiftãšæ¯èŒããŸãããã
ããããã¹ãŠç¥ã£ãŠãã人ã®ããã«ãããªãã¯ãŸã ç ã®ããã«åºãããããšãã§ããŸãã Objective-Cã§ç¥ã£ãŠããããã«ãã¯ã©ã¹ã¯NSObjectãŸãã¯NSProxyããéæ¥çãŸãã¯çŽæ¥ç¶æ¿ããå¿ èŠããããŸãã NSObjectã¯ã©ã¹ã¯ãéå ¬åŒãããã³ã«NSObjectãå®è£ ããŠããŸãã SwiftObjectãæ€èšãããšãããã«æ»ããŸãã å°æ¥çã«ã¯ãå°æ¥çã«2ã€ã®èšèªã®åéãäœãã®ã«åœ¹ç«ã€ã®ã¯ãã®ãããã³ã«ã§ãããšèšããŸããããã«ãããããªã¢ãŒãã£ãºã ã®åã§ãïŒ NSObjectã¯ã©ã¹ã®ãã¹ãŠã®ã¡ãœããã®äžéšãèŠãŠãããŸãã ãããŠãã®åŸããã®ãã°ãããNSObjectã®äœãåé¡ãªã®ããæ¢ããŠçµè«ä»ããŸããã ç§ã¯é·ãéããªããèŠãããŸããã圌ãã¯é転ããŸããïŒ
@interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; } + (void)load; + (void)initialize; - (instancetype)init #if NS_ENFORCE_NSOBJECT_DESIGNATED_INITIALIZER NS_DESIGNATED_INITIALIZER #endif ; + (instancetype)new OBJC_SWIFT_UNAVAILABLE("use object initializers instead"); + (instancetype)allocWithZone:(struct _NSZone *)zone OBJC_SWIFT_UNAVAILABLE("use object initializers instead"); + (instancetype)alloc OBJC_SWIFT_UNAVAILABLE("use object initializers instead"); - (void)dealloc OBJC_SWIFT_UNAVAILABLE("use 'deinit' to define a de-initializer"); - (void)finalize; ....
æåã®2ã€ã®æ¹æ³ã¯ãéåžžã®Objectice Céçºè ã«ã¯ããŸãåºäŒããªããããããã§ã¯è©³ãã説æããŸããã loadã¡ãœããã¯ãã¯ã©ã¹ãŸãã¯ã«ããŽãªãã©ã³ã¿ã€ã ã«ããŒãããããšãã«åŒã³åºãããç¶æ¿ã®å€å žçãªèŠåã«åŸãããå®è¡æã«ã¢ããªã±ãŒã·ã§ã³ããããã¯ããŸãã åæåã¡ãœããã¯ãã¯ã©ã¹ãæåã«äœ¿çšããåã«é 延ã¢ãŒãã§åŒã³åºãããã¢ããªã±ãŒã·ã§ã³ããããã¯ãããç¶æ¿ã®å€å žçãªèŠåã«åŸããŸãã
åŸç¶ã®ãã¹ãŠã®ã¡ãœããã¯ããªããžã§ã¯ãã®äœæãšåæåãæ åœããŸãã ãŸãããããã«ã€ããŠãå°ã説æããŸãã allocWithZoneã¡ãœãã㯠ããªããžã§ã¯ãã«ã¡ã¢ãªãå²ãåœãŠã圹å²ãæãããŸãã å éšã§ã¯ã圌ã¯ç§ãã¡ã®ææã®mallocãåŒã³åºããŸãã ããã¯ãã¡ã¢ãªããŸãŒã³ã«åå²ããããšãã®beã®æ代ããã§ãã ãã¹ãŠã®ãªããžã§ã¯ãã1ã€ã®ãŸãŒã³ã§äœæãããããã«ãªã£ããããå éšã§allocWithZoneãåŒã³åºããŠããã©ã«ãã®ãŸãŒã³NSDefaultMallocZoneãæž¡ãallocã¡ãœãããç»å ŽããŸãã ã
ãªããžã§ã¯ããåé€ããããšã deallocã¡ãœãããšfinalizeã¡ãœãããåŒã³åºãããŸãã ãããã®ã¡ãœããã§ã¯ãé¢é£ãããã¹ãŠã®ãªãœãŒã¹ãã¯ãªã¢ããããã®çµæã空ãã¡ã¢ãªã空ãã¡ã¢ãªããŒã«ã«å ¥ããŸãã éåžžã ãã¡ã€ãã©ã€ãºã¯äœ¿çšããããæåŸã®ãªãªãŒã¹ãçºçããã¹ã¬ããã§deallocãåŒã³åºãããŸã ã
次ã®äžé£ã®ã¡ãœããã«ç§»åããŸã
- (id)copy; - (id)mutableCopy; + (id)copyWithZone:(struct _NSZone *)zone OBJC_ARC_UNAVAILABLE; + (id)mutableCopyWithZone:(struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;
ãŸããããããã¹ãããã©ã€ãã§æžããããšã®ãªã人ã«ãšã£ãŠãã圌ããã³ããŒã®ããã ãšæšæž¬ããã®ã¯ç°¡åã§ãã ãŸãŒã³ã§ã¯ããã¹ãŠãæ確ã§ããããããã¯ãã¯ãé¢ä¿ã®ãªãå€ä»£ã®æ¹æ³ã§ãã å®éãç§ãã¡ããäœããã³ããŒããã«ã¯ã NSCopyingãããã³ã«ãå®è£ ããå¿ èŠããããŸãããããã®ã¡ãœãããåçŽã«åŒã³åºããšããã¹ãŠã倱æããŸãã ãã ããããã«ã€ããŠã¯åŒãç¶ã説æããŸãã ãããŸã§ã®éã次ã®ããã¯ã«é²ã¿ãŸãã
+ (BOOL)instancesRespondToSelector:(SEL)aSelector; + (BOOL)conformsToProtocol:(Protocol *)protocol; - (IMP)methodForSelector:(SEL)aSelector; + (IMP)instanceMethodForSelector:(SEL)aSelector; - (void)doesNotRecognizeSelector:(SEL)aSelector; + (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE(""); - (BOOL)allowsWeakReference UNAVAILABLE_ATTRIBUTE; - (BOOL)retainWeakReference UNAVAILABLE_ATTRIBUTE; + (BOOL)isSubclassOfClass:(Class)aClass; + (BOOL)resolveClassMethod:(SEL)sel OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0); + (BOOL)resolveInstanceMethod:(SEL)sel OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0); + (Class)superclass; + (Class)class OBJC_SWIFT_UNAVAILABLE("use 'aClass.self' instead");
ããã§ã¯ãå çã§ãã å®å šãªã³ãŒãã®éµã¯æ€çŽ¢ãšã³ãžã³siã«ãããŸãã ãããã®ã¡ãœããã«ããããªããžã§ã¯ããŸãã¯ã¯ã©ã¹ãå®è£ ãããããã³ã«ãå¿çå¯èœãªã»ã¬ã¯ã¿ãŒãªã©ãè©äŸ¡ã§ããŸãã é²ã
- (id)forwardingTargetForSelector:(SEL)aSelector OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0); - (void)forwardInvocation:(NSInvocation *)anInvocation OBJC_SWIFT_UNAVAILABLE(""); - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE("");
æåã®2ã€ã®ã¡ãœããã¯ãäœãå®è£ ããªããšãã¹ãŠãã¯ã©ãã·ã¥ãããŸã§åŒã³åºãããŸãã ããã¯ããªããžã§ã¯ããããªããããããäœãæãã§ããããç解ããããããæããªãã¡ãœãããåŒã³åºããšãã«èµ·ãããŸãã ãããææ矩ã«è¡ãå Žåã¯ããããã®ã¡ãœããã®1ã€ã決å®ããã»ã¬ã¯ã¿ãŒãžã®åŒã³åºããéä¿¡å ãããã°åŠçã決å®ããã®ã«åå芪åã«ããŠãã ããã ããã¯ãå®éã«ã¯ã¡ãã»ãŒãžãªãã€ã¬ã¯ãã¡ã«ããºã ãšåŒã°ããŸãã ãããèªãããšãã§ããããããã®èšäºãããã3ã€ã®æ¹æ³ããããŸãã ããã«ãã ããã€ããã¯ãããŸããããããªããšããã®èšäºã®æ¬è³ªã倱ããŸãã
ææ°ã®æ¹æ³ãèŠãŠã¿ãŸããã
+ (NSUInteger)hash; + (NSString *)description; + (NSString *)debugDescription;
ç§ã¯èª°ããããã·ã¥ã¡ãœãããç¥ã£ãŠãããšæããããã¯ãªããžã§ã¯ãã®æ¯èŒãã³ã¬ã¯ã·ã§ã³å ã®ãã¹ãã«ãããªããžã§ã¯ãã®é åžãªã©ã«äœ¿çšããã ãªããžã§ã¯ãã®ããã¢ãã¬ã¹ã ãã§ãªããäœããã®æå³ã®ããæ å ±ããã°ã§è¡šç€ºããå Žåã¯ã descriptionã¡ãœãããšdebugDescriptionã¡ãœãããåå®çŸ©ããå¿ èŠããããŸãã
ãµããç§ã¯ãã§ã«ãããã®æ¹æ³ã説æããã®ã«ããããããŠããŸããã ãã®ã¯ã©ã¹ã詳ããèŠãŠã¿ãŸããããããã§ã¯ãåºæ¬çã«æ€çŽ¢ãšã³ãžã³ã®ãã¹ãŠã®ã¯ã©ã¹ã®å é ã«ãããŸãã 圌ã®äœãåé¡ãªã®ã§ããïŒ ãªã圌ããããªã«å¥œããããªãã®ïŒ ã¯ãã圌ã®ãã¹ãŠãééã£ãŠããŸãïŒ
ç§ãã¡ã®OOPååãããã«èšãããã«ïŒç¶æ¿ãã«ãã»ã«åãããªã¢ãŒãã£ãºã ïŒ ããããäœããã®çç±ã§ã1ã€ã®ã¯ã©ã¹ãããã¹ãŠãç¶æ¿ãããšã¯èšãããŠããŸãããJavaãšCïŒã®éçºè ãèš±ããŠãã ããã ã¢ãŒããã¯ãã£ãæ§ç¯ããçµéšã®ããããã°ã©ããŒã¯ãåœåã¯éåžžã«èãæãããŠããã¢ãŒããã¯ãã£ãŒæ±ºå®ã®ããŸããŸãªèœãšãç©Žã«ééãããšæããŸãã ç¶æ¿ã¯æéç匟ã®ãããªãã®ã§ãæçµçã«ã¯ææ ®æ·±ãã¢ãŒããã¯ãã£ããã¹ãŠãŒãã«ããããéçºã®ããã«æãçžããŸãã 建ç¯ã«é¢ããå€ãã®æ¬ã¯ãç¶æ¿ã§ã¯ãªãæ§æãéžæãããšè¿°ã¹ãŠããŸãã ããã¯ããæè»ãªã¢ãããŒãã§ãããç¶æ¿ãåŠçããã®ã«éåžžã«åŒ·åã§ãã ã€ãŸããæœè±¡åãåé¢ããããã«æ¡åŒµããããšã¯æ£ããããšã§ãã ä»åŸãSwiftã¯ããã°ã©ããå©çšã§ãããã®åºæ¬ã¯ã©ã¹ã倱ã£ããšèšããŸãã
å®éãããã¯SwiftObjectãšåŒã°ããObjective-Cãšå¯Ÿè©±ããå¿ èŠããããã¹ãŠã®ã¯ã©ã¹ïŒSwiftã§èšè¿°ãããïŒãç¶æ¿ãããŸãã 圌ã«ã€ããŠãã£ãšè©±ããŸãããã å€ãã®äººãããããèšãã§ãããïŒãã®ç·ã¯äœã§ããïŒ ç¶æ¿ã¯ã¯ãŒã«ãªããšã§ãã³ãŒããåå©çšããŸãããããã¯æªãããšã§ãã ãã®ãããã¯ãå¥ã®èšäºã«å ¥ããŠãä»ã®ããšã«ã€ããŠè©±ããŸãã ããšãã°ãäœãã³ããŒããããªãã®ã«ããªãcopyã¡ãœãããå¿ èŠãªã®ã§ããïŒ ããã«ãããããããç§ã¯ãããåŒã³åºãããšãã§ããNSCopyingãã³ã¯ãå®è£ ããªãå Žåãããèªäœã§ãã¹ãŠãèœã¡ãŸãã ç¶æ¿ã«ã€ããŠè©±ããŸãããã ãªããžã§ã¯ããåæåããå Žåã«åŒã³åºãå¿ èŠãããinitã¡ãœããããããŸãããããèªäœã§åŒã³åºãããdeallocã¡ãœããããããŸãïŒ ãªããžã§ã¯ãã®ã©ã€ããµã€ã¯ã«ã®ã¡ãœããã§ããã決ããŠæåã§åŒã³åºãå¿ èŠã¯ãããŸããã ãããã誰ãç§ã«ããããããããŸãããæ¬åœã«çŽ æŽãããã§ããïŒ ã¯ããããã¯ãŸã£ããçŽ æŽãããããšã§ã¯ãããŸããã NSObjectã¯ã©ã¹èªäœã«ãããå¿ èŠã®ãªãããšãå®è¡ããããå¿ èŠã®ãªãããšãç¥ãããšãã§ããŸãã ãã®ãããã¯ãããã«çºå±ãããããšã¯ã§ããŸãããNSObjectããã¹ãã§ã¯ãªãããšã¯ãã§ã«æããã§ãããããããã°ã©ããŒã«ãšã£ãŠã¯Swiftèšèªã«å§¿ãæ¶ããŸããã æ£åŒã«ã¯ãã¡ãããåºæ¬ã¯ã©ã¹ã¯IOSãã©ãããã©ãŒã ã®ã¿ã«çãŸããŸãããããäºãã«ä»²è¯ãããããã«ãããã2ã€ã®èšèªïŒè人Objective-Cãšéå¿çãªSwiftã§ãã 圌ãçç®ã§èŠãŠã¿ãŸãããã
@implementation SwiftObject + (void)initialize {} + (instancetype)allocWithZone:(struct _NSZone *)zone { assert(zone == nullptr); return _allocHelper(self); } + (instancetype)alloc { // we do not support "placement new" or zones, // so there is no need to call allocWithZone return _allocHelper(self); } + (Class)class { return self; } - (Class)class { return (Class) _swift_getClassOfAllocated(self); } + (Class)superclass { return (Class) _swift_getSuperclass((const ClassMetadata*) self); } - (Class)superclass { return (Class) _swift_getSuperclass(_swift_getClassOfAllocated(self)); } + (BOOL)isMemberOfClass:(Class)cls { return cls == (Class) _swift_getClassOfAllocated(self); } - (BOOL)isMemberOfClass:(Class)cls { return cls == (Class) _swift_getClassOfAllocated(self); } - (instancetype)self { return self; } - (BOOL)isProxy { return NO; } - (struct _NSZone *)zone { auto zone = malloc_zone_from_ptr(self); return (struct _NSZone *)(zone ? zone : malloc_default_zone()); } - (void)doesNotRecognizeSelector: (SEL) sel { Class cls = (Class) _swift_getClassOfAllocated(self); fatalError(/* flags = */ 0, "Unrecognized selector %c[%s %s]\n", class_isMetaClass(cls) ? '+' : '-', class_getName(cls), sel_getName(sel)); } - (id)retain { auto SELF = reinterpret_cast<HeapObject *>(self); swift_retain(SELF); return self; } - (void)release { auto SELF = reinterpret_cast<HeapObject *>(self); swift_release(SELF); } - (id)autorelease { return _objc_rootAutorelease(self); } - (NSUInteger)retainCount { return swift::swift_retainCount(reinterpret_cast<HeapObject *>(self)); } - (BOOL)_isDeallocating { return swift_isDeallocating(reinterpret_cast<HeapObject *>(self)); } - (BOOL)_tryRetain { return swift_tryRetain(reinterpret_cast<HeapObject*>(self)) != nullptr; } - (BOOL)allowsWeakReference { return !swift_isDeallocating(reinterpret_cast<HeapObject *>(self)); } - (BOOL)retainWeakReference { return swift_tryRetain(reinterpret_cast<HeapObject*>(self)) != nullptr; } // Retaining the class object itself is a no-op. + (id)retain { return self; } + (void)release { /* empty */ } + (id)autorelease { return self; } + (NSUInteger)retainCount { return ULONG_MAX; } + (BOOL)_isDeallocating { return NO; } + (BOOL)_tryRetain { return YES; } + (BOOL)allowsWeakReference { return YES; } + (BOOL)retainWeakReference { return YES; } - (void)dealloc { swift_rootObjCDealloc(reinterpret_cast<HeapObject *>(self)); } - (BOOL)isKindOfClass:(Class)someClass { for (auto isa = _swift_getClassOfAllocated(self); isa != nullptr; isa = _swift_getSuperclass(isa)) if (isa == (const ClassMetadata*) someClass) return YES; return NO; } + (BOOL)isSubclassOfClass:(Class)someClass { for (auto isa = (const ClassMetadata*) self; isa != nullptr; isa = _swift_getSuperclass(isa)) if (isa == (const ClassMetadata*) someClass) return YES; return NO; } + (BOOL)respondsToSelector:(SEL)sel { if (!sel) return NO; return class_respondsToSelector((Class) _swift_getClassOfAllocated(self), sel); } - (BOOL)respondsToSelector:(SEL)sel { if (!sel) return NO; return class_respondsToSelector((Class) _swift_getClassOfAllocated(self), sel); } + (BOOL)instancesRespondToSelector:(SEL)sel { if (!sel) return NO; return class_respondsToSelector(self, sel); } - (BOOL)conformsToProtocol:(Protocol*)proto { if (!proto) return NO; auto selfClass = (Class) _swift_getClassOfAllocated(self); // Walk the superclass chain. while (selfClass) { if (class_conformsToProtocol(selfClass, proto)) return YES; selfClass = class_getSuperclass(selfClass); } return NO; } + (BOOL)conformsToProtocol:(Protocol*)proto { if (!proto) return NO; // Walk the superclass chain. Class selfClass = self; while (selfClass) { if (class_conformsToProtocol(selfClass, proto)) return YES; selfClass = class_getSuperclass(selfClass); } return NO; } - (NSUInteger)hash { return (NSUInteger)self; } - (BOOL)isEqual:(id)object { return self == object; } - (id)performSelector:(SEL)aSelector { return ((id(*)(id, SEL))objc_msgSend)(self, aSelector); } - (id)performSelector:(SEL)aSelector withObject:(id)object { return ((id(*)(id, SEL, id))objc_msgSend)(self, aSelector, object); } - (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2 { return ((id(*)(id, SEL, id, id))objc_msgSend)(self, aSelector, object1, object2); } - (NSString *)description { return _getDescription(self); } - (NSString *)debugDescription { return _getDescription(self); } + (NSString *)description { return _getClassDescription(self); } + (NSString *)debugDescription { return _getClassDescription(self); } - (NSString *)_copyDescription { // The NSObject version of this pushes an autoreleasepool in case -description // autoreleases, but we're OK with leaking things if we're at the top level // of the main thread with no autorelease pool. return [[self description] retain]; } - (CFTypeID)_cfTypeID { // Adopt the same CFTypeID as NSObject. static CFTypeID result; static dispatch_once_t predicate; dispatch_once_f(&predicate, &result, [](void *resultAddr) { id obj = [[NSObject alloc] init]; *(CFTypeID*)resultAddr = [obj _cfTypeID]; [obj release]; }); return result; } // Foundation collections expect these to be implemented. - (BOOL)isNSArray__ { return NO; } - (BOOL)isNSDictionary__ { return NO; } - (BOOL)isNSSet__ { return NO; } - (BOOL)isNSOrderedSet__ { return NO; } - (BOOL)isNSNumber__ { return NO; } - (BOOL)isNSData__ { return NO; } - (BOOL)isNSDate__ { return NO; } - (BOOL)isNSString__ { return NO; } - (BOOL)isNSValue__ { return NO; } @end
ããïŒ ã芧ã®å 容ã§ãããSwiftObjectã¯ã©ã¹ã¯éå ¬åŒãããã³ã«NSObjectãå®è£ ããŠããŸãããã¡ãœããã®å®è£ ã¯ãã§ã«å®å šã«ç°ãªã£ãŠããŸãã NSObjectããæ瀺çã«ç¶æ¿ãããŠããªããã¹ãŠã®Swiftã¯ã©ã¹ã¯ãSwiftObjectã¯ã©ã¹ããæé»çã«ç¶æ¿ãããããã«ãªããŸããã ããã¯ãObjectice Cãšã®å¯Ÿè©±ãå¿ èŠãšãããã©ãããã©ãŒã ã§ã®ã¿çºçããããšãããã«ä¿®æ£ããŸããObjectiveC以å€ã®ãã©ãããã©ãŒã ïŒLinuxãªã©ïŒã§ã¯ãããã¯å¿ èŠãããŸããã
ç§ãã¡ãåŠãã ããã«ãããã¯å¥ã®è©±ã§ãã å°ãæããŠããããšæããŸãã ãåç¥ã®ããã«ãSwiftã¯Appleãªããžããªã®ãããªãã¯ãã¡ã€ã³ã«ãããŸãã 誰ããããããŠã³ããŒãããŠãœãŒã¹èªäœããã³ã³ãã€ã«ããããšãæ°ã«ããŸãããããã¯ãŸãã«ç§ãã¡ããã£ãããšã§ãã ããããç§ãã¡ã¯ããå°ãé²ã¿ãŸããã ããŒãžã§ã³8以éã®æåãªXcodeã䜿çšãããšãããŒã«ãã§ãŒã³ãæã«å ¥ããããšãã§ããŸãã ã¯ããããã¯ã©ãããæå³ã§ããïŒ ããã¯ããããã°æ å ±ã䜿çšããŠSwiftãã¢ã»ã³ãã«ããXcodeã«é 眮ã§ããããšãæå³ããŸãã
ç§ã®ååã¯ããããã£ãã®ã§ãSwiftãœãŒã¹ãXcodeããçŽæ¥ãããã°ã§ããŸããã
ç§ãã¡ã¯å°ãæ°ãæ£ããããŠããŸããç§ãã¡ã¯æšè«ãç¶ããŸãã Objective-Cã§çæãããã¡ã¿ããŒã¿ãšSwiftã§çæãããã¡ã¿ããŒã¿ã®æ§è³ªãç°ãªãããšã¯ãã§ã«æããã§ãã Objectice Cã§é·ãéæžããŠãããå°ãªããšãå°ãã©ã³ã¿ã€ã ãéžæããããã°ã©ããŒãªã誰ã§ããã®æ§é ãç¥ã£ãŠãã
struct objc_class { Class isa OBJC_ISA_AVAILABILITY; #if !__OBJC2__ Class super_class OBJC2_UNAVAILABLE; const char *name OBJC2_UNAVAILABLE; long version OBJC2_UNAVAILABLE; long info OBJC2_UNAVAILABLE; long instance_size OBJC2_UNAVAILABLE; struct objc_ivar_list *ivars OBJC2_UNAVAILABLE; struct objc_method_list **methodLists OBJC2_UNAVAILABLE; struct objc_cache *cache OBJC2_UNAVAILABLE; struct objc_protocol_list *protocols OBJC2_UNAVAILABLE; #endif } OBJC2_UNAVAILABLE;
ç§ãã¡ã¯çããã¹ãŠã®ãªããžã§ã¯ããæçµçã«ãããçšåºŠãã®æ§é ã®åœ¢ã§èŠããããšãç¥ã£ãŠããŸãã ç§ãã¡ã®ãæ°ã«å ¥ãã®NSObjectã¯ããã®æ§é ãšçŽæ¥å¯Ÿè©±ããããšããããã°ã©ããä¿è·ããæœè±¡åã§ãã ããªãã¯ããã«ã€ããŠãã£ãšèªãããšãã§ããŸãããã·ã¢èªã§ãããèšèªã®ååšã®éã«æžãããããããã®èšäºããããŸãã Swiftã«æ»ããŸãããã çŸåšãã¡ã¿ããŒã¿ãä¿åããããã®ç¹å¥ãªã¯ã©ã¹ã®ã¡ã¿ããŒã¿ãç»å ŽããŸãããããã¯éåžžã«èšå€§ã§ãSwiftã®ãã¹ãŠã®ã¡ã¿ããŒã¿ã®åºç€ãæ§æããŸãã å¥ã®èšäºã§ãã®æ§é ã®è©³çŽ°ã説æããŸãã ãã1ã€ã®ãã€ã³ãã¯ããã¹ãŠã®Swiftãªããžã§ã¯ããç¬èªã®ã¡ã¿ããŒã¿æ§é ãæã£ãŠããã«ãããããããäºææ§ã®ããã«ããã«å€ãã®Objective-Cã¡ã¿ããŒã¿ãçæããŸãã ã€ãŸããåSwiftãªããžã§ã¯ãã«ã¯2ã»ããã®ã¡ã¿ããŒã¿ããããŸãã
å°ãèŠçŽããŸãããã NSObjectã¯èŠèŠãããããæ°ããèšèªã§äœ¿çšããå ŽæããªãããšãããããŸããã ãããã£ãŠãSwiftã§ã¯ãäœãããç¶æ¿ããã«ã¯ã©ã¹ãäœæã§ããŸãããå®éã«ã¯ãäºææ§ã®ããã«ãSwiftObjectããç¶æ¿ããŸãã SwiftObjectã¯ã©ã¹ã¯ãã¬ã³ãã«ãªããNSObjectã¯ã©ã¹ã¯éå ¬åŒãããã³ã«NSObjectã«ãã£ãŠèš±å¯ãããŸããã ããã«ãããSwiftãªããžã§ã¯ããidã«ãã£ã¹ãããObjective Cã«æž¡ãããšãã§ããŸãããããã§åäœããã®ãããã®ã§ãåSwiftãªããžã§ã¯ãã¯ããã®ã¡ã¿ããŒã¿ã«å ããŠãObjective C.ã¡ã¿ããŒã¿ãçæããŸãã ã¿ããªããããšãïŒ å¥åº·ãšè¯ãæ°åïŒ