定义Swift和Objective-C类的扩展

时间:2016-05-20 00:14:12

标签: ios objective-c swift

我正在尝试将我的应用程序从Objective C迁移到swift。 我有几个Objective C类别。由于Swift有“扩展”,我已经创建了它。但有些如何,我无法从现有的Objective C中调用它。

下面的代码给出了编译错误

No visible @interface for 'NSString' declares the selector 'myCategory'

扩展类

import Foundation


     extension String {

        func myCategory() -> String {

            return "I am From Swift";

        }


    } 

我的ViewController

#import <TestProject-Swift.h>


@interface TestViewController ()

@end

@implementation TestViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSString *str = @"Testing";

    NSLog(@"Here is result %@", [str myCategory]);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

它如何与Swift类一起使用? 我也为上面的扩展文件创建了Bridging头文件。

编辑: 我试过制作“公开”,但它不起作用。

1 个答案:

答案 0 :(得分:1)

你有正确的想法,但Swift的String和Cocoa的NSString是两种不同的类型。你不知道这一点的原因是,感谢一些魔法,Swift很高兴在NSString上调用String方法让你的生活更轻松。将您的扩展程序设为NSString而不是String,它应该适用于两种情况。