我正在为 ObjC 类编写 Swift 扩展。虽然我的代码编译并运行完美,我收到一堆 Xcode 警告(每个 Swift 方法一个):
"Method definition for 'foo_method:' not found"
"Method definition for 'bar_method:' not found"
"Method definition for 'baz_method:' not found"
重现 Xcode 消息非常简单。我用四行非样板代码制作了这个演示项目:
Objective-C(NSView 的子类)
// Subclass_of_NSView.h
#import <Cocoa/Cocoa.h
@interface Subclass_of_NSView : NSView
@end
// Subclass_of_NSView.m
@implementation Subclass_of_NSView
- (instancetype)initWithFrame:(NSRect)frame
//______________^ WARNING: Method definition for resizeSubviewsWithOldSize: not found
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
@end
Swift(扩展 Obj-C 子类)
// Extension_of_Subclass.swift
import Foundation
extension Subclass_of_NSView {
override func resizeSubviewsWithOldSize( old_bounds_size:NSSize ) {
}
}
桥接头
// Demo_Project-Bridging-Header.h
#import "Subclass_of_NSView.h"
我猜如果我执行以下任一操作,警告就会消失:
a) 在 ObjC 类的 .m 文件中创建一堆虚拟方法。
b) 在我的 Swift 扩展中,扩展 ObjC 类的超类。
我不喜欢这两种解决方案。
有没有更好的方法让编译器满意?
我不确定这里发生了什么,我认为问题与如何NSView
已桥接到 swift 语言。
如果您要重写这些方法,请确保调用super
实施,自NSView
如果没有它们,可能会崩溃得很厉害。然而我不确定即使这是否安全,你仍然可能会崩溃NSView
- 也许发生错误的原因是苹果正在做一些奇怪/非标准的设置。
如果我是你,我只会忍受编译器警告,并通过以下方式向 Apple 报告问题http://bugreport.apple.com
。希望它能在 Xcode 6 未来的测试版中得到修复。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)