Swift扩展"未找到方法定义"

Cha*_*ism 6 objective-c swift

我正在为我的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"
Run Code Online (Sandbox Code Playgroud)

重现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
Run Code Online (Sandbox Code Playgroud)

Swift(扩展Obj-C子类)

// Extension_of_Subclass.swift

import Foundation

extension Subclass_of_NSView {

    override func resizeSubviewsWithOldSize( old_bounds_size:NSSize ) {

    }

}
Run Code Online (Sandbox Code Playgroud)

桥接报头

// Demo_Project-Bridging-Header.h

#import "Subclass_of_NSView.h"
Run Code Online (Sandbox Code Playgroud)

我想如果我要么警告就会消失:

a)在我的ObjC类的.m文件中创建一堆伪方法.

b)在我的Swift扩展中,扩展我的ObjC类的超类.

我不喜欢这些解决方案.

有没有更好的方法让编译器满意?

Abh*_*ert 2

我不确定这里发生了什么,我认为问题与如何NSView桥接到 swift 语言有关。

\n\n

如果您要重写这些方法,请确保调用实现super,因为NSView如果没有它们,可能会严重崩溃。然而我不确定即使这是否安全,你仍然可能会崩溃NSView\xe2\x80\x94\xc2\xa0 也许发生错误的原因是因为苹果正在做一些奇怪/非标准的设置。

\n\n

如果我是你,我只会忍受编译器警告,并通过以下方式向 Apple 报告问题http://bugreport.apple.com. 希望它能在 Xcode 6 未来的测试版中得到修复。

\n