我正在为我的 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 类的父类(super class)。
我不喜欢这两种解决方案。
有没有更好的方法让编译器满意?
最佳答案
我不确定这里发生了什么,我认为问题与 NSView
如何桥接到 swift 语言有关。
如果您要覆盖这些方法,请确保调用 super
实现,因为没有它们 NSView
可能会崩溃。但是,我不确定这是否安全,您仍然可能会破坏 NSView
— 发生错误的原因可能是因为 Apple 正在进行一些奇怪/非标准的设置。
如果我是你,我只会忍受编译器警告,并通过 http://bugreport.apple.com
将问题报告给 Apple。希望它会在 Xcode 6 的 future 测试版中得到修复。
关于objective-c - swift 扩展 "Method definition not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328842/