相关疑难解决方法(0)

如何从Swift调用Objective-C代码

在Apple的新Swift语言中,如何调用Objective-C代码?

Apple提到它们可以在一个应用程序中共存,但这是否意味着可以在技术上重用Objective-C中的旧类,同时在Swift中构建新类?

推理

Objective-C是一种独立于平台的语言,而Swift则依赖于平台.因此,在Swift中编写非平台相关代码(业务逻辑库)并不明智.但是,在其中编写与平台相关的代码(例如,与接口相关)将非常好.不是说这是一个好主意,但它肯定是一种兴趣.

objective-c swift

936
推荐指数
13
解决办法
27万
查看次数

Swift中的@selector()?

我正在尝试创建一个NSTimerin Swift但我遇到了一些麻烦.

NSTimer(timeInterval: 1, target: self, selector: test(), userInfo: nil, repeats: true)
Run Code Online (Sandbox Code Playgroud)

test() 是同一个类中的函数.


我在编辑器中收到错误:

找不到接受提供的参数的'init'的重载

当我改变selector: test()selector: nil错误消失.

我试过了:

  • selector: test()
  • selector: test
  • selector: Selector(test())

但没有任何作用,我在参考文献中找不到解决方案.

selector nstimer swift

647
推荐指数
14
解决办法
30万
查看次数

不能在Objective-C中使用Swift类

我尝试Swift在我的app中集成代码.我的应用程序是写入的Objective-C,我添加了一个Swift类.我做了这里描述的所有事情.但我的问题是Xcode没有创建-Swift.h文件,只有桥接头.所以我创造了它,但它实际上是空的.我可以在Swift中使用我所有的ObjC类,但我不能这样做.我标记了我的快速课程,@objc但没有帮助.我现在能做什么?

编辑:Apple说:"当您将Swift代码导入Objective-C时,您依靠Xcode-generated头文件将这些文件暴露给Objective-C.[...]此标题的名称是您的产品模块名称,然后添加" -Swift.h"."

现在,当我想导入该文件时,它会出错:

    //MainMenu.m

    #import "myProjectModule-Swift.h" //Error: 'myProjectModule-Swift.h' file not found

    @implementation MainMenu
Run Code Online (Sandbox Code Playgroud)

这是我的FBManager.swift文件:

@objc class FBManager: NSObject {

    var descr = "FBManager class"

    init() {
        super.init()
    }

    func desc(){
        println(descr)
    }

    func getSharedGameState() -> GameState{
        return GameState.sharedGameState() //OK! GameState is written in Objective-C and no error here
    }
}
Run Code Online (Sandbox Code Playgroud)

objective-c ios swift

251
推荐指数
12
解决办法
15万
查看次数

快速语言中的结构与类

来自Apple的书"结构和类之间最重要的区别之一是结构在代码中传递时总是被复制,但类是通过引用传递的."

任何人都可以让我理解这意味着什么,对我来说,类和结构似乎是一样的.

swift

184
推荐指数
6
解决办法
7万
查看次数

将Project-Swift.h导入到Objective-C类...找不到文件

我有一个在Objective-C中启动的项目,我试图将一些Swift代码导入到我之前编写的Objective-C相同的类文件中.

我在同一个项目中咨询过Apple Sws和Objective-C的文档,以及这样的SO 问题,但仍然无济于事:我在放入后继续得到文件未找到错误#import "NewTestApp-Swift.h"(NewTestApp是产品的名称)和模块).

这是我到目前为止所做的:

  1. Define Modules,YES为应用程序选择.
  2. 确保产品模块名称中没有任何空格(请参阅下面的问题截图)

我已经尝试使用#import "NewTestApp-Swift.h"ViewController.m,ViewController.hAppDelegate.m但他们没有工作过.

我还做错了什么?谢谢你的帮助.


设置截图:

在此输入图像描述


我目前遇到的错误:

在此输入图像描述

xcode objective-c ios swift xcode6

115
推荐指数
7
解决办法
8万
查看次数

'#selector'指的是未暴露给Objective-C的方法

通过addTarget传递参数的新Xcode 7.3通常适用于我,但在这种情况下,它会在标题中抛出错误.有任何想法吗?当我尝试将其更改为@objc时,它会抛出另一个

谢谢!

cell.commentButton.addTarget(self, action: #selector(FeedViewController.didTapCommentButton(_:)), forControlEvents: UIControlEvents.TouchUpInside)
Run Code Online (Sandbox Code Playgroud)

它正在调用的选择器

func didTapCommentButton(post: Post) {
}
Run Code Online (Sandbox Code Playgroud)

xcode swift

102
推荐指数
3
解决办法
6万
查看次数

Swift 3 - 动态vs @objc

将方法标记为@objc与动态之间的区别是什么,何时执行一个与另一个相比?

以下是Apple对动态的定义.

dynamic将此修饰符应用于可由Objective-C表示的类的任何成员.使用动态修饰符标记成员声明时,始终使用Objective-C运行时动态调度对该成员的访问.编译器从不内联或不虚拟化对该成员的访问.

因为使用Objective-C运行时调度使用dynamic修饰符标记的声明,所以使用objc属性隐式标记它们.

dynamic objective-c ios swift3

37
推荐指数
3
解决办法
8281
查看次数

将swift框架导入Objective-c项目

我将swift框架导入Objective-c项目,如下所示:

@import MyFramework;
Run Code Online (Sandbox Code Playgroud)

问题是只有一些类被我导入框架的类识别.

被认可的班级:

public class RecognizedClass:UIViewController, WKNavigationDelegate, WKScriptMessageHandle 
 { ... } 
Run Code Online (Sandbox Code Playgroud)

这个课不是:

public class VeediUtils
{ ... } 
Run Code Online (Sandbox Code Playgroud)

它们都是公共的,为什么第一个在工作区被识别而另一个没有?

另外我在头文件MyFramework-Swift.h中看到一个类

@interface RecognizedClass : UIViewController <WKNavigationDelegate, WKScriptMessageHandler>
Run Code Online (Sandbox Code Playgroud)

出现而另一个不

这是为什么?

还指出,当我将swift框架导入swift项目时,同样的过程也能正常工作

objective-c ios ios-frameworks swift

19
推荐指数
2
解决办法
3万
查看次数

什么'@'符号在Swift中意味着什么?

我没有目标C的经验,所以我遇到了一些符号的问题.在我的"AppDelegate.swift"文件中,顶部有一个"@UIMainApplication".这是什么意思?

另外,如果可能的话,您能否在C++中给我"等效"声明(如果存在)?

谢谢.

swift

13
推荐指数
2
解决办法
5597
查看次数

如何在Objective C中使用多个param调用Swift初始化方法

我在我的Swift文件中有一个Initializer方法,如下所示:

public init(frame: CGRect, type: NVActivityIndicatorType? = nil, color: UIColor? = nil, padding: CGFloat? = nil) {
        self.type = type ?? NVActivityIndicatorView.DEFAULT_TYPE
        self.color = color ?? NVActivityIndicatorView.DEFAULT_COLOR
        self.padding = padding ?? NVActivityIndicatorView.DEFAULT_PADDING
        super.init(frame: frame)
        isHidden = true
}
Run Code Online (Sandbox Code Playgroud)

我想从我的Objective-C文件中调用此方法,但在编译时抛出它的错误.

错误:

/ Users/Desktop/old data/ChatScreenViewController.m:396:92:'NVActivityIndi​​catorView'没有可见的@interface声明选择器'initWithFrame:type:color:padding:'

Obj-C调用代码:

NVActivityIndicatorView *objNVActivityIndicatorView = [[NVActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) type:NVActivityIndicatorTypeLineScalePulseOut color:[UIColor blueColor] padding:10]
Run Code Online (Sandbox Code Playgroud)

我试过的:

Objective-C在我的快速课程中添加

@objc public final class NVActivityIndicatorView: UIView
Run Code Online (Sandbox Code Playgroud)

仍然无法访问上述方法.

我的Swift文件:NVActivityIndi​​catorView.swift

任何想法出了什么问题?

提前致谢!

objective-c initializer swift

6
推荐指数
1
解决办法
2623
查看次数

Objective C 运行时特性是什么?

在我刚刚读到的一篇博客文章中:

'Swift 允许我们从 NSObject 扩展类以获得对象的 Objective-C 运行时功能。它还允许我们使用 @objc 注释 Swift 方法,以允许 Objective-C 运行时使用这些方法。

我不明白 Objective-C 运行时特性这个术语。这是否意味着该代码也可以在 Objective-C 项目中使用?

terminology runtime objective-c nsobject swift

5
推荐指数
1
解决办法
1901
查看次数

找不到Project-Swift.h文件

我有一个带有几个文件的新Swift项目,我需要添加一些Objc代码.

Build Settings,我Objective-C Generated Interface Header NameMyProject-Swift.h

Product Module Name并且Product Name都是MyProject.


我的Objective-C Bridging HeaderMyProject/MyProject-Bridging-Header.h

我的内容Bridging Header是:

#ifndef MyProject_Bridging_Header_h
#define MyProject_Bridging_Header_h

#import "Blakey.h"

#endif
Run Code Online (Sandbox Code Playgroud)

Blakey.h 非常简单:

@import Foundation;

#import "MyProject-Swift.h"
@class KeyPair;

@interface Blakey: NSObject

- (void)createKeyPairForSeed:(NSString *)seed;

@end
Run Code Online (Sandbox Code Playgroud)

Blakey.m

#import <Foundation/Foundation.h>
#import "Blakey.h"

@implementation Blakey


- (void)createKeyPairForSeed:(NSString *)seed;
{

}

@end
Run Code Online (Sandbox Code Playgroud)

(旁注:我知道我的函数返回一个void,一旦修复了这个问题就会改变,所以它返回一个实际的值)

为什么Xcode中抛出一个错误在#import "MyProject-Swift.h"Blakey.h

objective-c ios swift

1
推荐指数
1
解决办法
2929
查看次数