Bring some of the more powerful features of Go to your iOS / Swift project such as channels, goroutines, and defers.
This is an experimental project. For production use of channels and sync APIs, check out the Safe project.
Built for Swift 2.0 - For Swift 1.2 support use v0.1.4 or earlier.
- Goroutines
- Defer
- Panic, Recover
- Channels
- Buffered Channels
- Select, Case, Default
- Closing
- Sync Package
- Mutex, Cond, Once, WaitGroup
Note that the following example and all of the examples in the examples
directory originated from https://gobyexample.com and Mark McGranaghan
Go
package main
import "fmt"
func main() {
jobs := make(chan int, 5)
done := make(chan bool)
go func() {
for {
j, more := <-jobs
if more {
fmt.Println("received job", j)
} else {
fmt.Println("received all jobs")
done <- true
return
}
}
}()
for j := 1; j <= 3; j++ {
jobs <- j
fmt.Println("sent job", j)
}
close(jobs)
fmt.Println("sent all jobs")
<-done
}
Swift
func main() {
var jobs = Chan<Int>(5)
var done = Chan<Bool>()
go {
for ;; {
var (j, more) = <?jobs
if more {
println("received job \(j!)")
} else {
println("received all jobs")
done <- true
return
}
}
}
for var j = 1; j <= 3; j++ {
jobs <- j
println("sent job \(j)")
}
close(jobs)
println("sent all jobs")
<-done
}
Each example has a .swift
and .go
file that contain the same logic.
./run.sh examples/goroutines.swift
./run.sh examples/goroutines.go
Add the following to your Cartfile:
github "tidwall/GoSwift"
Then run carthage update
.
Follow the current instructions in Carthage's README for up to date installation instructions.
The import GoSwift
directive is required in order to access GoSwift features.
Add the following to your Podfile:
use_frameworks!
pod 'GoSwift'
Then run pod install
with CocoaPods 0.36 or newer.
The import GoSwift
directive is required in order to access GoSwift features.
Copy the GoSwift\go.swift
file into your project.
There is no need for import GoSwift
when manually installing.
Josh Baker @tidwall
The GoSwift source code available under the MIT License.
The Go source code in the examples
directory is copyright Mark McGranaghan and licensed under a
Creative Commons Attribution 3.0 Unported License.
The Swift version of the example code is by Josh Baker