2016-01-06 113 views
2

我想從React Native向Swift實現的模塊發送一個字符串,然後從本地模塊獲取String結果作爲回調以供進一步使用。React Native Swift回調

這裏就是我的了:

//HelloWorldModule.m 

#import "RCTBridgeModule.h" 

@interface RCT_EXTERN_MODULE(HelloWorldModule, NSObject) 

RCT_EXTERN_METHOD(sayHelloWorld:(NSString *)name callback:(RCTResponseSenderBlock *)successCallback) 

@end 

除了迅速落實:

// HelloWorldModule.swift 

import Foundation 
import UIKit 
import AVFoundation 

@objc(HelloWorldModule) 
class HelloWorldModule: NSObject { 

    @objc func sayHelloWorld(name: String, callback successCallback: RCTResponseSenderBlock) { 
    NSLog("Log from Swift: \(name)") 
    successCallback([name]) 
    } 
} 

,最後無論進入ReactNative部分:

// requiring the Swift module in React Native 
var HelloWorldModule = require('react-native').NativeModules.HelloWorldModule; 

... 

// using it somewhere in the render function 

render: function() { 
     return (
     <Text> 
      Hello World Module answers: {this.hwmExt("Jadzia Dax")} 
     </Text> 
     ); 
}, 

hwmExt: function(name) { 
    return HelloWorldModule.sayHelloWorld(name, function(result) { 
     var hwAnswer = "swiftCB: " + result; 
     console.log(hwAnswer); 
     return hwAnswer; 
    }); 
} 

console.log(hwAnswer);打印出我期望它是swiftCB: Jadzia Dax但結果不是ing過去了嗎?我在Swift的方法定義中做了什麼錯誤,因爲我總是不確定嗎?不知怎的,這個問題已經矇蔽:/ React Native Swift模塊回調不幸在RN文檔中沒有涉及。

回答

5

RCTResponseSenderBlock的回調如下的Node.js 錯誤第一樣式即第一回調PARAM保持誤差和第二PARAM保持結果

在你的榜樣,要爲錯誤返回一個值,也沒有價值結果,因此undefined。您應該返回NSNull作爲錯誤(第一個)參數,而name作爲第二個參數,例如[NSNUll(), name]

This short blog post顯示瞭如何使用Swift和React Native執行此操作。在blog的帖子中,請參見MySwiftThingy.swift中的行。

+0

偉大的發現,短而甜美的文章! –