我正在为我的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类的超类.
我不喜欢这些解决方案.
有没有更好的方法让编译器满意?
我不确定这里发生了什么,我认为问题与如何NSView
桥接到 swift 语言有关。
如果您要重写这些方法,请确保调用实现super
,因为NSView
如果没有它们,可能会严重崩溃。然而我不确定即使这是否安全,你仍然可能会崩溃NSView
\xe2\x80\x94\xc2\xa0 也许发生错误的原因是因为苹果正在做一些奇怪/非标准的设置。
如果我是你,我只会忍受编译器警告,并通过以下方式向 Apple 报告问题http://bugreport.apple.com
. 希望它能在 Xcode 6 未来的测试版中得到修复。
归档时间: |
|
查看次数: |
3825 次 |
最近记录: |