首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Objective-C代码可以调用Swift类扩展吗?

Objective-C代码可以调用Swift类扩展吗?
EN

Stack Overflow用户
提问于 2014-11-24 12:04:12
回答 6查看 60.4K关注 0票数 111

我搜索了一些帖子,我想我不能在Swift下写一个扩展,然后从Objective-C代码中调用它,对吧?

@objc这样的属性只支持方法、类、协议?

EN

回答 6

Stack Overflow用户

发布于 2015-02-04 20:09:46

您可以编写Swift扩展并在Objective-C代码中使用它。使用XCode 6.1.1进行了测试。

你所需要做的就是:

  • 在Swift中创建扩展模块(从Swift 4.0.3开始需要@objc注解)

Objective-C类中的

  • #import "ProjectTarget-Swift.h" (其中"ProjectTarget“表示与Swift扩展关联的XCode目标)

  • 从Swift extension

调用方法

票数 107
EN

Stack Overflow用户

发布于 2017-10-24 04:09:49

我发现在Swift 4.0中,我必须在我的扩展关键字前面添加@objc,以便Swift扩展方法在我正在扩展的Objc类的实例中可见。

简而言之:

文件配置设置:

代码语言:javascript
复制
CustomClass.h
CustomClass.m
CustomClassExtension.swift

在CustomClassExtension中:

代码语言:javascript
复制
@objc extension CustomClass
{
    func method1() 
    {
        ...
    }
}

在我的AppDelegate.m中:

代码语言:javascript
复制
self.customClass = [[CustomClass alloc] init];
[self.customClass method1];
票数 77
EN

Stack Overflow用户

发布于 2015-08-29 00:45:11

此解决方案适用于Swift 2.2和Swift 3。请注意,只能从Objective-C访问类的扩展(不包括结构或枚举)。

代码语言:javascript
复制
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

代码语言:javascript
复制
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)
    }
}
票数 51
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27097688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档