mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Right now we have a hack to mirror ObjC protocol methods into an imported
ObjC class, because Swift's lookup only looks into superclasses, not into
protocols (by default, anyway). This already isn't great because it's wrong
for @optional, but it was particularly bad if /two/ superclasses conformed
to the same protocol (directly or indirectly). Because the mirrored methods
weren't marked as overrides, the type checker would consider them both as
possibilities, leading to strange errors like this:
<REPL Input>:1:1: error: ambiguous use of 'description'
w.description()
^
AppKit.NSWindow:268:8: note: found this candidate
func description() -> String
^
ObjectiveC.NSObject:72:8: note: found this candidate
func description() -> String
^
Now, we check to see if a superclass conforms to a protocol already before
mirroring its methods into the current class or category.
<rdar://problem/16102321> and possibly also <rdar://problem/16038085>
Swift SVN r14189
128 lines
2.5 KiB
Objective-C
128 lines
2.5 KiB
Objective-C
typedef unsigned long NSUInteger;
|
|
typedef long NSInteger;
|
|
|
|
@protocol NSObject
|
|
- description;
|
|
@end
|
|
|
|
@interface NSObject <NSObject>
|
|
+ alloc;
|
|
- init;
|
|
+ new;
|
|
- performSelector:(SEL)selector withObject:(id)obj;
|
|
- (Class)myClass;
|
|
+ description;
|
|
@end
|
|
|
|
@interface A : NSObject
|
|
- (int)method:(int)arg withDouble:(double)d;
|
|
+ (int)classMethod;
|
|
+ (int)classMethod:(int)arg;
|
|
- (int)counter;
|
|
@property int counter;
|
|
- (void)setCounter:(int)value;
|
|
|
|
- (int)informalProp;
|
|
|
|
- (int)informalMadeFormal;
|
|
- init;
|
|
|
|
@property int overriddenProp;
|
|
@end
|
|
|
|
@protocol BProto
|
|
- (int)method:(int)arg withFloat:(float)f;
|
|
- (int)otherMethod:(int)arg withFloat:(float)f;
|
|
@end
|
|
|
|
@protocol Cat1Proto
|
|
- cat1Method;
|
|
@end
|
|
|
|
@interface B : A <BProto>
|
|
- (int)method:(int)arg withFloat:(float)f;
|
|
+ (int)classMethod:(int)arg withInt:(int)i;
|
|
- (id<BProto>)getAsProto;
|
|
- (id<BProto, Cat1Proto>)getAsProtoWithCat;
|
|
- performAdd:(int)x withValue:(int)y withValue:(int)z withValue2:(int)w;
|
|
@property (readonly) int readCounter;
|
|
|
|
@property int informalMadeFormal;
|
|
|
|
@property int overriddenProp;
|
|
|
|
- initWithInt:(int)i;
|
|
- initWithInt:(int)i andDouble:(double)d;
|
|
- initWithDouble:(double)d1 :(double)d2;
|
|
- initBBB:(B*)b;
|
|
- initForWorldDomination;
|
|
- notAnInit __attribute__((objc_method_family(init), ns_returns_retained));
|
|
- (id)_initFoo;
|
|
- (void)anotherMethodOnB;
|
|
|
|
+ (void)instanceTakesObjectClassTakesFloat:(float)x;
|
|
- (void)instanceTakesObjectClassTakesFloat:(id)x;
|
|
|
|
@end
|
|
|
|
@interface A(Cat1) <Cat1Proto>
|
|
- method:(int)i onCat1:(double)d;
|
|
- cat1Method;
|
|
@end
|
|
|
|
@interface A()
|
|
- method:(int)i onExtA:(double)d;
|
|
@end
|
|
|
|
@interface B()
|
|
- method:(int)i onExtB:(double)d;
|
|
+ newWithA:(A*)a;
|
|
@end
|
|
|
|
@interface A(Subscripting)
|
|
- objectAtIndexedSubscript:(NSInteger)idx;
|
|
- (void)setObject:(id)object atIndexedSubscript:(NSInteger)idx;
|
|
|
|
- objectForKeyedSubscript:(id)key;
|
|
@end
|
|
|
|
@interface B(Subscripting)
|
|
- (void)setObject:(id)object forKeyedSubscript:(id)key;
|
|
@end
|
|
|
|
@protocol P2
|
|
- (void)p2Method;
|
|
- (id)initViaP2:(double)x second:(double)y;
|
|
@end
|
|
|
|
@interface B(P2) <P2>
|
|
@end
|
|
|
|
@interface NSDate : NSObject
|
|
- (signed char)isEqualToDate:(NSDate *)anotherDate;
|
|
@end
|
|
|
|
NSDate *swift_createDate(void);
|
|
|
|
@interface NSProxy
|
|
+ alloc;
|
|
@end
|
|
|
|
@interface AProxy : NSProxy
|
|
- initWithInt:(int)i;
|
|
@end
|
|
|
|
typedef signed char BOOL;
|
|
|
|
@interface A(BoolStuff)
|
|
- setEnabled:(BOOL)enabled;
|
|
@end
|
|
|
|
typedef struct objc_selector *SEL;
|
|
SEL sel_registerName(const char *str);
|
|
|
|
@interface AlmostSubscriptable
|
|
- (A*) objectForKeyedSubscript:(id)key;
|
|
- (void)setObject:(id)object forKeyedSubscript:(id)key;
|
|
@end
|