objective-c - swift 扩展 "Method definition not found"

标签 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"

重现 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/

相关文章:

objective-c - 使用 AutoLayout 在哪里添加我想在 NSScrollView 中 float 的 subview ?

swift - 无法更改数组中的元组

iOS + Xcode + Swift 4.2 从 iOS 设备向 APN 发送消息

json - SwiftyJSON 读取 JSON 数组问题

ios - UIButton setSelected:否不显示默认背景图像

iphone - 使用 AVAssetWriter 进行视频编码 - CRASHES

objective-c - 如何从 OSX 10.9 中的 ProcessSerialNum 获取 PID?

iphone - 是否有 APN 的替代方案

ios - Zendesk iOS SDK 多语言支持

ios - 更新 UILabel.text 很慢