GVKun编程网logo

如何从Swift调用C?(swift 调用c++代码)

16

在这篇文章中,我们将带领您了解如何从Swift调用C?的全貌,包括swift调用c++代码的相关情况。同时,我们还将为您介绍有关ios–Swift:如何从不同的swift文件中调用函数、ios–如何从

在这篇文章中,我们将带领您了解如何从Swift调用C?的全貌,包括swift 调用c++代码的相关情况。同时,我们还将为您介绍有关ios – Swift:如何从不同的swift文件中调用函数、ios – 如何从Swift进行facetime调用?、objective-c – 在升级到Xcode 7.3 swift 2.2之后,从swift调用obj-c枚举不起作用、Swift Webview:如何从JavaScript正确调用Swift代码?的知识,以帮助您更好地理解这个主题。

本文目录一览:

如何从Swift调用C?(swift 调用c++代码)

如何从Swift调用C?(swift 调用c++代码)

有没有办法从Swift调用C例程?

许多iOS / Apple库仅是C语言,我仍然希望能够调用它们。

例如,我希望能够从Swift调用objc运行时库。

特别是,如何桥接iOS C标头?

答案1

小编典典

是的,您当然可以与Apples
C库进行交互。这里说明了如何。
基本上,C型,C指针等被翻译成对象斯威夫特,例如C int在夫特是一个CInt

我为另一个问题构建了一个小例子,该例子可以作为对C和Swift之间的桥梁:

主Swift

import Foundationvar output: CInt = 0getInput(&output)println(output)

UserInput.c

#include <stdio.h>void getInput(int *output) {    scanf("%i", output);}

cliinput-Bridging-Header.h

void getInput(int *output);

ios – Swift:如何从不同的swift文件中调用函数

ios – Swift:如何从不同的swift文件中调用函数

我的 Xcode 6 beta-2项目中有多个类型为UIViewController的swift文件.

我基本上想知道文件A中的一些数据在文件B中使用.

我的文件都是UIViewControllers,我创建了一个没有参数的函数,它返回UIViewController_A中的字符串.当我尝试在UIViewController_B中调用所述函数时,intellisense为我填写,但是我必须有一个自动填充为UIViewController_A的参数.

在代码中,LoginScreen.swift == ViewController_A和ViewResidentsTask == ViewController_B.

我的函数名为checkPrivs,存在于LoginScreen.swift中,如下所示:

func checkPrivs()-> String{
    return userPrivType
}

这就是我认为它应该被称为:

var userType = LoginScreen.checkPrivs()

当我尝试调用它时,这就是intellisense所做的事情:

var userType = LoginScreen.checkPrivs(LoginScreen)

这引发了一个错误,说“预期”,“分隔符”
不确定我应该用什么替换LoginScreen但我尝试过的所有内容(空,字符串,当前文件名)都会引发错误.

我是Xcode的新手,从c#背景来看,任何帮助都会非常感激.

答案:事实证明我在UIViewController类中声明了’loginScreen’,而我应该在类之外声明它.

解决方法

您应该首先创建LoginScreen的实例并在该对象上调用方法:
let login = LoginScreen()
var userType = login.checkPrivs()

ios – 如何从Swift进行facetime调用?

ios – 如何从Swift进行facetime调用?

我正在使用 Swift for iPad开发一个使用facetime的应用程序.

我知道Apple在iOS 8中引入了App projection (described about 3/4 of way down page)(一个应用程序可以将自己“投射”到另一个应用程序中).是facetime能够做到这一点,如果是这样,我如何在swift中访问此功能?

如果没有,那么如何以编程方式使用app的facetime呢?我发现this question about the Swift API解释了如何在目标C中执行此操作.如何使该代码适应swift?当我用它写的时候,我收到错误“Expected; seperator”

除了以上两个,有没有其他或更好的方法来为一个快速的应用程序编程facetime功能?

谢谢!

解决方法

Swift中的一个更独立的解决方案:
private func facetime(phoneNumber:String) {
  if let facetimeURL:NSURL = NSURL(string: "facetime://\(phoneNumber)") {
    let application:UIApplication = UIApplication.sharedApplication()
    if (application.canopenURL(facetimeURL)) {
      application.openURL(facetimeURL);
    }
  }
}

现在,您应该可以使用facetime(“7178881234”)进行临时调用.

objective-c – 在升级到Xcode 7.3 swift 2.2之后,从swift调用obj-c枚举不起作用

objective-c – 在升级到Xcode 7.3 swift 2.2之后,从swift调用obj-c枚举不起作用

该代码在从7.1开始升级到 Xcode 7.3之前工作良好,而且迅速2.2.我也看过使用typedef NS_ENUM(NSUInteger,MyStatus)…的答案…但如果可能的话,我宁可不改变现有的obj-c代码.

在obj-c头文件中定义:

typedef enum {    StatusPending,StatusTimeout,StatusSuccess,StatusFail} MyStatus;

Swift文件中的声明:

/* some code to retrieve the status */switch (status) {case .StatusSuccess: /* do something *//* other test cases omitted here */default:}

我试过使用.rawValue,.value等,但我仍然收到一个错误:

在“MyStatus”类型中找不到枚举大小写“StatusSuccess”

在升级之前,所有工作都正常,并尝试卸载/重新安装Xcode 7.3,Product-> Clean,Product-> Clean Build Folder ..但没有成功:-(

解决方法

您不能在@interface和@end中声明“typedef NS_ENUM(NSUInteger,EnumName){}”,解析xcode 7.2与xcode 7.3不同.所以,只要在@interface @end块之外移动你的枚举声明,它应该可以正常工作,否则它被认为是私有声明

Swift Webview:如何从JavaScript正确调用Swift代码?

Swift Webview:如何从JavaScript正确调用Swift代码?

我正在尝试使我的javascript与快速代码交互,但不幸的是我没有成功。

目前,我只是尝试更改标题的颜色并显示一条消息,如下面的代码所示。

这是我的( index.html )代码:

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <h1>WebView Test</h1>
        <script type="text/javascript" src="main.js"></script>
    </body>
</html>

这是我的( main.js -JavaScript )代码:

function callNativeApp () {
    try {
        webkit.messageHandlers.callbackHandler.postMessage("Send from JavaScript");
    } catch(err) {
        console.log('error');
    }
}

setTimeout(function () {
    callNativeApp();
},5000);

function redHeader() {
    document.querySelector('h1').style.color = "red";
}

这是我的( ViewController.swift )代码:

import UIKit
import WebKit

class ViewController: UIViewController,WKScriptMessageHandler {

    @IBOutlet var containerView : UIView! = nil

    var webView: WKWebView?

    override func loadView() {
        super.loadView()

        var contentController = WKUserContentController();
        var userScript = WKUserScript(
            source: "redHeader()",injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,forMainFrameOnly: true
        )
        contentController.addUserScript(userScript)
        contentController.addScriptMessageHandler(
            self,name: "callbackHandler"
        )

        var config = WKWebViewConfiguration()
        config.userContentController = contentController

        self.webView = WKWebView()
        self.view = self.webView!
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view,typically from a nib.
        var url = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("index",ofType: "html")!)
        var req = NSURLRequest(URL: url)
        self.webView!.loadRequest(req)
    }

    func userContentController(userContentController: WKUserContentController!,didReceiveScriptMessage message: WKScriptMessage!) {
            if(message.name == "callbackHandler") {
            println("JavaScript is sending a message \(message.body)")
            } }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

今天的关于如何从Swift调用C?swift 调用c++代码的分享已经结束,谢谢您的关注,如果想了解更多关于ios – Swift:如何从不同的swift文件中调用函数、ios – 如何从Swift进行facetime调用?、objective-c – 在升级到Xcode 7.3 swift 2.2之后,从swift调用obj-c枚举不起作用、Swift Webview:如何从JavaScript正确调用Swift代码?的相关知识,请在本站进行查询。

本文标签: