Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我能上一节';s在Swift中部分实施,在目标C中部分实施?_Ios_Objective C_Swift_Class - Fatal编程技术网

Ios 我能上一节';s在Swift中部分实施,在目标C中部分实施?

Ios 我能上一节';s在Swift中部分实施,在目标C中部分实施?,ios,objective-c,swift,class,Ios,Objective C,Swift,Class,我想扩展我用Swift写的课程。我想用Objective C编写扩展,因为我需要把一些无法移植到Swift中的Objective C代码放进去。我知道我可以创建一个.h和.m,然后在桥接头中包含.h。但是在.h中,我需要包含原始的.swift类文件,对吗 我怎样才能解决这个问题?我可以使用myclass swift.h吗?谢谢。以下文档可能会有所帮助:。你可能已经看过了,但以防万一。以下问题也可能有所帮助: 如您所知,要在Swift中使用Objective-C代码,有一个桥接头。反过来说,自动生

我想扩展我用Swift写的课程。我想用Objective C编写扩展,因为我需要把一些无法移植到Swift中的Objective C代码放进去。我知道我可以创建一个
.h
.m
,然后在桥接头中包含
.h
。但是在
.h
中,我需要包含原始的
.swift
类文件,对吗


我怎样才能解决这个问题?我可以使用
myclass swift.h
吗?谢谢。

以下文档可能会有所帮助:。你可能已经看过了,但以防万一。以下问题也可能有所帮助:

如您所知,要在Swift中使用Objective-C代码,有一个桥接头。反过来说,自动生成的
*-Swift.h
头应该导入
.m
(和
.mm
)实现文件中。文档说明不应将其导入
.h
文件。事实上,编译器不允许您将其导入到直接或间接包含在桥接头中的
.h
文件中。但是,您可以小心地将其导入到其他
.h
文件中

现在,假设您的Swift类名为
SwiftClass
,您想在其中添加一个名为
ocFunction()
的方法,该方法是在Objective-C源文件(
.m
)中实现的

然后修改您的
SwiftClass
,以包括以下内容:

class SwiftClass : NSObject
{
...
    @nonobjc func ocFunction()
    {
        self.perform(Selector(("ocFunction")))
    }
...
}
参考答案建议在扩展中执行此操作,但由于您完全控制
SwiftClass
源代码,因此您可以直接在类中执行此操作。顺便说一句,Objective-C category函数可以命名为
SwiftClass
函数以外的其他函数,因此不需要
@nonobjc

另一种方法可能是定义如下所示的Objective-C包装器接口:

@interface SwiftClassOC : NSObject 
+(void)ocFunction:(SwiftClass*)sc;
@end
并通过桥接头将其提供给Swift。实现将进入
.m
文件。然后,您在
swifftclass
中的
ocFunction()
如下所示

func ocFunction()
{
    SwiftClassOC.ocFunction(self)
}

请注意,SwiftClassOC是无状态的,因此它本质上是一组接受
SwiftClass
指针的帮助函数
SwiftClass
是维护状态的类。

可以使用Swift扩展Objective-C类,但不能使用Objective-C扩展Swift类


我想用Objective C编写扩展,因为我需要把一些我无法移植到Swift的Objective C代码


您可以这样做,但不能作为Swift课程的一部分。我通常会在Objective-C中创建一个“helper”类,并将其导入Swift。

我在Obj-C方面没有什么经验,但你不能只向Swift类添加一个类别吗?@Sweeper问题是我需要添加的代码是来自其他项目的复制粘贴代码,由于与数据类型不兼容,无法将其转换为Swift(我需要使用指针数据类型,Swift中不存在指针数据类型)。可能Swift类不可能有ObjectiveC类别。@AhmadF问题是,由于上述问题,我不知道如何实现它。我不能将原来的Swift类包含到Obj C扩展文件中,因为这是一个Swift项目。如果我不能包含原始的Swift类,我该如何扩展该类?“我需要将一些无法移植到Swift中的目标C代码”我不知道为什么,但一般来说,我可以说将ObjectVec类用于Swift扩展这实际上是一个很好的解决方案!从没想过我可以执行选择器,选择器可以调用类的obj-c版本!谢谢
func ocFunction()
{
    SwiftClassOC.ocFunction(self)
}