【发布时间】:2014-11-10 22:11:33
【问题描述】:
我遇到了一个奇怪的问题,它涉及 Swift 中的简单继承。我可能会做一些完全愚蠢的事情,所以如果有人有任何建议..提前谢谢!
我正在使用最新的 XCode 6 GM 版本 6A313。
以下是使 Objective-C 向后兼容的 2 个 Swift 类。
@objc
public class ObjectA : NSObject {
var testProp: String!
init(testProp: String) {
self.testProp = testProp
}
}
@objc
public class ObjectB : ObjectA {
var testPropB: String!
init(testProp: String, testPropB: String) {
self.testPropB = testPropB
super.init(testProp: testProp)
}
}
然后我在 Objective-C 代码中初始化并使用该对象。
ObjectB *objectB = [[ObjectB alloc] initWithTestProp: @"TestProp" testPropB: @"TestPropB"];
// This executes correctly and has the correct value
NSLog(@"%@", objectB.testPropB);
// I then pass this newly constructed object to another class that's written in Swift
AnotherClass *anotherClass = [[AnotherClass alloc] init];
[anotherClass someMethod:objectB];
这是 Swift 类,当我尝试访问继承的属性时,我得到一个 EXC_BAD_ACCESS 代码 1。
@objc
public class AnotherClass : NSObject {
public func someMethod(objectB: ObjectB) {
// This executes and assigns correctly
let prop = objectB.testProp
// This errors out with EXC_BAD_ACCESS error code 1
// In the debugger, objectB.testPropB actually seem to have the correct value
let propB = objectB.testPropB
}
}
【问题讨论】:
-
Objective-C 可以挤进“Swift”源代码中的量……
-
是的。我们正在从 Swift 过渡到 Objective-C,所以很遗憾它会在一段时间内看起来非常混合。
-
我会专门针对
nil测试objectB.testPropB。另外,您确定AnotherClass.propB和ObjectB.testPropB属于同一类型吗? -
我试图检查 objectB.testPropB 与 nil,但调用 objectB.testPropB 的行为给了我一个 EXC_BAD_ACCESS。此外,我已经消除了 AnotherClass.propB 并简单地在 objectB.testPropB 上使用 NSLog 但仍然没有继续...
标签: objective-c inheritance swift xcode6