I have several Swift classes CclassA, ClassB), all implementing the BitField
protocol:
protocol BitField
{
init?(limit: UInt64, verbose: Int)
}
My AppDelegate Swift class has:
var a: BitField?
switch mm
{
case .A: a = ClassA(limit: maxp, verbose: verbose )
case .B: a = ClassB(limit: maxp, verbose: verbose
//case .C: a = ObjC(limit: maxp, verbose: verbose )
Cannot assign value of type ‘ObjC!’ to type 'BitField?'
}
This works fine.
But now I want to add an Objective-C class.
I created BitFieldProtocol.h with:
@protocol BitField
- (instancetype)initWithPrimeLimit: (uint64_t)primeLimit verbose:
(NSInteger)verbose;
@end
and ObjC.h,m with:
@import Foundation;
#import "BitField.h"
@interface ObjC : NSObject <BitField>
- (instancetype)initWithLimit: (uint64_t)limit verbose: (NSInteger)verbose;
@end
I can create it in AppDelegate:
let ax = ObjC(limit: maxp, verbose: verbose )
print(“ax = \(ax)")
But I cannot put it into my switch statement. The compiler says: Cannot assign
value of type ‘ObjC!’ to type 'BitField?'
How can I convince the compiler that the ObjC really implements the BitField
protocol?
This compiles:
case .C: a = ObjC(limit: maxp, verbose: verbose ) as! BitField?
but crashes at run-time:
Could not cast value of type 'ObjC' (0x10bb0c298) to 'Primes.BitField’
(0x10bb10120).
Gerriet.
_______________________________________________
Cocoa-dev mailing list ([email protected])
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]