![](/img/trans.png)
[英]What is the modern objective c syntax for NSUserDefault setObject?
[英]How to use JS Context SetObject in Objective C
我正在嘗試使用Swift編寫的本教程在JS和ObjC之間進行通信,但是我正在使用ObjC。
@objc protocol CommunicationProtocol: JSExport {
static func callNativeFunction(_ mytext: String)
}
@objc class CommunicationClass: NSObject, CommunicationProtocol {
class func callNativeFunction(_ mytext: String) {
print("Native function called \(mytext)")
}
}
並在JS中注入通訊類
ctx.setObject(unsafeBitCast(CommunicationClass.self, to: AnyObject.self), forKeyedSubscript: "SwiftBridge" as (NSCopying & NSObjectProtocol)!)
我將如何在目標C中執行此操作
//
// ViewController.m
// ObjcTest
//
// Created by Inder Kumar Rathore on 07/05/17.
// Copyright © 2017 Inder Kumar Rathore. All rights reserved.
//
#import "ViewController.h"
#import <JavaScriptCore/JavaScriptCore.h>
@protocol CommunicationProtocol <JSExport>
+ (void)callNativeFunction:(NSString *)mytext;
@end
@interface CommunicationClass : NSObject<CommunicationProtocol>
@end
@implementation CommunicationClass
+ (void)callNativeFunction:(NSString *)mytext {
NSLog(@"Hurray! Native method called:%@", mytext);
}
@end
@implementation ViewController {
__weak IBOutlet UIWebView *webView;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"abc" withExtension:@"html"];
[webView loadRequest:[NSURLRequest requestWithURL:url]];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
JSContext *ctxt = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
[ctxt setObject:[CommunicationClass class] forKeyedSubscript:@"SwiftBridge"];
}
@end
HTML文件abc.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Web page</title>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
function callNative(mytext) {
SwiftBridge.callNativeFunction(mytext);
}
function changeText(text) {
$("#textfield").val(text);
}
$(function() {
$("#textfield").on("keyup", function() {
textChanged($("#textfield").val());
});
});
</script>
</head>
<body>
<input type="text" id="textfield" />
<br/>
<a onclick="callNative('hi from web!');" href="#">call native function</a>
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.