spr*_*awk 87 objective-c swift swift-extensions
我搜索了一些帖子,我想我不能在swift下编写扩展名,并用Objective-C代码调用它,对吧?
@objc like属性只支持方法,类,协议?
mar*_*dan 69
您可以编写Swift扩展并在ObjectiveC代码中使用它.使用XCode 6.1.1进行测试.
你需要做的就是:
在Swift中创建扩展(没有@objc注释)
在ObjectiveC类中导入"ProjectTarget-Swift.h"(其中"ProjectTarget"表示与Swift扩展相关联的XCode目标)
从Swift扩展中调用方法
And*_* P. 63
我发现在Swift 4.0中我必须@objc在我的扩展关键字前添加,以便Swift扩展方法被我正在扩展的Objc类的实例看到.
简而言之:
文件配置设置:
CustomClass.h
CustomClass.m
CustomClassExtension.swift
Run Code Online (Sandbox Code Playgroud)
在CustomClassExtension中:
@objc extension CustomClass
{
func method1()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
在我的AppDelegate.m中:
self.customClass = [[CustomClass alloc] init];
[self.customClass method1];
Run Code Online (Sandbox Code Playgroud)
Fot*_*Dim 42
此解决方案适用于Swift 2.2和Swift 3.请注意,只能从Objective-C访问类的扩展(不适用于结构或枚举).
import UIKit
extension UIColor {
//Custom colours
class func otherEventColor() -> UIColor {
return UIColor(red:0.525, green:0.49, blue:0.929, alpha:1)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的ObjC文件中#import"ProductModuleName-Swift.h".
mcl*_*inj 40
如其他答案所述,导入生成的Swift标头在大多数情况下都有效.
当类别上的桥接类型定义(即延伸部被限定在一个例外是String,不NSString).这些类别不会自动桥接到他们的Objective-C对应物.要解决这个问题,您需要使用Objective-C类型(并在Swift代码中强制转换返回值as String)或者为Swift和Objective-C类型定义扩展.
| 归档时间: |
|
| 查看次数: |
42504 次 |
| 最近记录: |