在这篇文章中,我们将带领您了解如何从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++代码)
- 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例程?
许多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文件中调用函数
我基本上想知道文件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’,而我应该在类之外声明它.
解决方法
let login = LoginScreen() var userType = login.checkPrivs()
ios – 如何从Swift进行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功能?
谢谢!
解决方法
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枚举不起作用
在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 ..但没有成功:-(
解决方法
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代码?的相关知识,请在本站进行查询。
本文标签: