-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
10ad564
commit 38ad639
Showing
2 changed files
with
12 additions
and
134 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,7 +12,11 @@ | |
|
||
DSBridge-Swift is a [DSBridge-iOS](https://github.com/wendux/DSBridge-IOS) fork in Swift. It allows developers to send method calls back and forth between Swift and JavaScript. | ||
|
||
# Installation | ||
# Usage | ||
|
||
Check out [wiki](https://github.com/EdgarDegas/DSBridge-Swift/wiki) for docs. | ||
|
||
## Installation | ||
|
||
DSBridge is available on both iOS and Android. | ||
|
||
|
@@ -34,7 +38,7 @@ Or install with npm: | |
npm install [email protected] | ||
``` | ||
|
||
# Usage | ||
# | ||
|
||
## Brief | ||
|
||
|
@@ -165,70 +169,6 @@ bridge.call('asyncFunction', 1, function(v) { console.log(v) }); | |
// 4 | ||
``` | ||
|
||
# Declaration Rules | ||
## Allowed Interface Types | ||
You can declare your interface as these types: | ||
- class | ||
- enum | ||
- struct | ||
|
||
> actors are not supported yet. Please file up your ideas about it. | ||
## Allowed Data Types | ||
You can receive or send the following types: | ||
- String | ||
- Int, Double (types toll-free bridged to NSNumber) | ||
- Bool | ||
- Standard JSON top-level objects: | ||
|
||
- Dictionary that's encodable | ||
|
||
- Array that's encodable | ||
|
||
|
||
## Allowed Function Declarations | ||
DSBridge-Swift ignores argument labels and parameter names of your functions. Thus you can name your parameters whatever you want. | ||
|
||
#### Synchronous Functions | ||
|
||
About parameters, synchronous functions can have: | ||
|
||
- 1 parameter, which is one of the above-mentioned *Allowed Data Types* | ||
- no parameter | ||
|
||
About return value, synchronous functions can have: | ||
|
||
- return value that's one of the above-mentioned *Allowed Data Types* | ||
- no return value | ||
|
||
For simplicity, we use `Allowed` to represent the before-mentioned Allowed Data Types. | ||
|
||
```swift | ||
func name() | ||
func name(Allowed) | ||
func name(Allowed) -> Allowed | ||
``` | ||
#### Asynchronous Functions | ||
|
||
Asynchronous functions are allowed to have 1 or 2 parameters and no return value. | ||
|
||
If there are 2 parameters, the first one must be one of the above-mentioned *Allowed Data Types*. | ||
|
||
The last parameter has to be a closure that returns nothing (i.e., `Void`). For parameters, the closure can have: | ||
|
||
- 1 parameter, one of the above-mentioned *Allowed Data Types* | ||
- 2 parameters, the first one is one of the above-mentioned *Allowed Data Types* and the second one is a `Bool` | ||
|
||
```swift | ||
typealias Completion = (Allowed) -> Void | ||
typealias RepeatableCompletion = (Allowed, Bool) -> Void | ||
|
||
func name(Completion) | ||
func name(RepeatableCompletion) | ||
func name(Allowed, Completion) | ||
func name(Allowed, RepeatableCompletion) | ||
``` | ||
Attribute your closure with `@ecaping` if needed. Otherwise, keep in mind that your functions run on the main thread and try not to block it. | ||
|
||
# Differences with DSBridge-iOS | ||
|
||
## Seamless `WKWebView` Experience | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,7 +9,11 @@ | |
|
||
DSBridge-Swift 是 [DSBridge-iOS](https://github.com/wendux/DSBridge-IOS) 的一个 Swift 版 fork。它允许开发者在原生和 JavaScript 之间调用彼此的方法。 | ||
|
||
# 集成方式 | ||
# 使用 | ||
|
||
在 [wiki](https://github.com/EdgarDegas/DSBridge-Swift/wiki) 中查看详细文档。 | ||
|
||
## 集成 | ||
|
||
DSBridge 是一个三端可用的 JavaScript Bridge。 | ||
|
||
|
@@ -20,6 +24,7 @@ DSBridge 是一个三端可用的 JavaScript Bridge。 | |
Android 端集成方式见 [DSBridge-Android](https://github.com/wendux/DSBridge-Android)。 | ||
|
||
你可以通过 CDN 引入 JavaScript 代码(或下载 JS 文件并添加到工程中以避免网络问题): | ||
|
||
```html | ||
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/dsbridge.js"></script> | ||
``` | ||
|
@@ -30,8 +35,6 @@ Android 端集成方式见 [DSBridge-Android](https://github.com/wendux/DSBridge | |
npm install [email protected] | ||
``` | ||
|
||
# 使用 | ||
|
||
## 简介 | ||
|
||
首先,在你的视图中使用 `DSBridge.WebView` 而非 `WKWebView`: | ||
|
@@ -168,71 +171,6 @@ bridge.call('asyncFunction', 1, function(v) { console.log(v) }); | |
// 4 | ||
``` | ||
|
||
## `Interface` 声明规则 | ||
|
||
### 支持的 `Interface` 类型 | ||
|
||
你可以将 `Interface` 声明为 `class`、`struct` 或 `enum`。暂未支持 `actor`,欢迎大家的想法。 | ||
|
||
### 支持的数据类型 | ||
|
||
你可以发送或接收这些类型的数据: | ||
|
||
- String | ||
- Int, Double 等(与 NSNumber 无缝转换的类型) | ||
- Bool | ||
- 标准的 JSON 顶层对象: | ||
- Dictionary,必须可编码为 JSON | ||
- Array,必须可编码为 JSON | ||
|
||
### 支持的方法声明 | ||
|
||
DSBridge-Swift 无视 `Interface` 中的方法的参数名,无论调用名还是内部名,因此你可以使用任意的参数名。 | ||
|
||
#### 同步方法 | ||
|
||
关于参数,同步方法只能: | ||
|
||
- 有 1 个参数,类型符合上述”支持的数据类型“ | ||
|
||
- 没有参数 | ||
|
||
关于返回值,同步方法可以: | ||
|
||
- 有返回值,类型符合上述”支持的数据类型“ | ||
- 没有返回值 | ||
|
||
为了简便,使用 `Allowed` 代指上面说的”支持的数据类型“: | ||
|
||
```swift | ||
func name() | ||
func name(Allowed) | ||
func name(Allowed) -> Allowed | ||
``` | ||
|
||
#### 异步方法 | ||
|
||
异步方法可以有 1 个或 2 个参数,不允许有返回值。 | ||
|
||
如果有 2 个参数,第 1 个参数类型必须符合上述”支持的数据类型“。 | ||
|
||
方法的最后一个参数必须是闭包,返回 `Void`。关于参数,闭包只能: | ||
|
||
- 有 1 个参数,类型符合上述”支持的数据类型“ | ||
- 有 2 个参数,第 1 个类型符合上述”支持的数据类型“,第 2 个必须是 `Bool` 类型 | ||
|
||
```swift | ||
typealias Completion = (Allowed) -> Void | ||
typealias RepeatableCompletion = (Allowed, Bool) -> Void | ||
|
||
func name(Completion) | ||
func name(RepeatableCompletion) | ||
func name(Allowed, Completion) | ||
func name(Allowed, RepeatableCompletion) | ||
``` | ||
|
||
闭包可以是 `@escaping` 的;如果不是的话,请注意,你的方法应当快速执行、立即返回,否则将会阻塞主线程。 | ||
|
||
# 与 DSBridge-iOS 的不同 | ||
|
||
## 无感的 `WKWebView` 体验 | ||
|