我搜索了一些帖子,我想我不能在Swift下写一个扩展,然后从Objective-C代码中调用它,对吧?
像@objc
这样的属性只支持方法、类、协议?
发布于 2015-02-04 20:09:46
您可以编写Swift扩展并在Objective-C代码中使用它。使用XCode 6.1.1进行了测试。
你所需要做的就是:
@objc
注解)Objective-C类中的
#import "ProjectTarget-Swift.h"
(其中"ProjectTarget“表示与Swift扩展关联的XCode目标)调用方法
发布于 2017-10-24 04:09:49
我发现在Swift 4.0中,我必须在我的扩展关键字前面添加@objc
,以便Swift扩展方法在我正在扩展的Objc类的实例中可见。
简而言之:
文件配置设置:
CustomClass.h
CustomClass.m
CustomClassExtension.swift
在CustomClassExtension中:
@objc extension CustomClass
{
func method1()
{
...
}
}
在我的AppDelegate.m中:
self.customClass = [[CustomClass alloc] init];
[self.customClass method1];
发布于 2015-08-29 00:45:11
此解决方案适用于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)
}
}
然后#在ObjC文件中导入"ProductModuleName-Swift.h"。
Swift 4
extension UIColor {
// As of Swift 4.0.3, the @objc annotation is needed if you want to use the extension in Objective-C files
@objc
class func otherEventColor() -> UIColor {
return UIColor(red:0.525, green:0.49, blue:0.929, alpha:1)
}
}
https://stackoverflow.com/questions/27097688
复制相似问题