我怎么能让我的代码等到DispatchQueue中的任务完成?它需要任何CompletionHandler或其他东西吗?
func myFunction() {
var a: Int?
DispatchQueue.main.async {
var b: Int = 3
a = b
}
// wait until the task finishes, then print
print(a) // - this will contain nil, of course, because it
// will execute before the code above
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Xcode 8.2并在Swift 3中编写.
multithreading asynchronous grand-central-dispatch swift swift3
我正在尝试使用Xcode中的Swift连接到VPN.我正在使用KeychainSwift来保存钥匙串参考.我的代码看起来像这样:
private func connectVPN(completion: @escaping () -> Void) {
let keychain = KeychainSwift()
keychain.set("<mypassword>", forKey: "passref")
keychain.set("<sharedsecretpassword>", forKey: "secretref")
NEVPNManager.shared().loadFromPreferences { error in
let vpnhost = "<11.11.11.11>"
let username = "<myusername>"
let p = NEVPNProtocolIPSec()
p.username = username
p.localIdentifier = username
p.serverAddress = vpnhost
p.remoteIdentifier = vpnhost
p.authenticationMethod = .sharedSecret
p.disconnectOnSleep = false
p.sharedSecretReference = keychain.getData("secretref")
p.passwordReference = keychain.getData("passref")
var rules = [NEOnDemandRule]()
let rule = NEOnDemandRuleConnect()
rule.interfaceTypeMatch = .any
rules.append(rule)
NEVPNManager.shared().localizedDescription = "My VPN"
NEVPNManager.shared().protocolConfiguration = p
NEVPNManager.shared().onDemandRules = …
Run Code Online (Sandbox Code Playgroud) 我需要在我的应用程序(Xcode 9.1,Swift 4)中存储一些对象。目前,我将其存储为:
class myItemManager {
var items: [myItem]? {
didSet {
Cache.c.items = items
}
}
static var manager = myItemManager() {
didSet {
myItemManager.manager.items = Cache.c.items
}
}
}
class Cache {
private let uds = UserDefaults.standard
static let c = Cache()
var items: [(myItem)]? {
get {
if let decoded = uds.object(forKey: Constants.Cache.myItem) as? Data {
let decodedItems = NSKeyedUnarchiver.unarchiveObject(with: decoded) as? [myItem]
return decodedItems
} else {
return nil
}
}
set {
let encodedData: Data …
Run Code Online (Sandbox Code Playgroud) 我正在使用Docker构建应用程序。我的Dockerfile看起来像这样:
FROM python:3.7.0
WORKDIR /app
COPY . /app
RUN apt-get -y update && apt-get -y install apt-utils build-essential libxml2-dev zlib1g-dev python-dev python-pip pkg-config libffi-dev libcairo-dev
RUN pip install -r requirements.txt
CMD ["./run"]
Run Code Online (Sandbox Code Playgroud)
我的项目结构:
.
??? Dockerfile
??? requirements.txt
??? run
??? src
??? stuff
Run Code Online (Sandbox Code Playgroud)
在要求,我把plotly
,pytest
和python-igraph
。问题是,python-igraph
卡在这部分上
Running setup.py bdist_wheel for python-igraph: started
Running setup.py bdist_wheel for python-igraph: still running...
Run Code Online (Sandbox Code Playgroud)
在相当长的一段时间内,但最终它会拉取数据并生成图像。但是,如此长时间每次重建项目都是不可接受的。
提取彼此不依赖的模块的正确方法是什么?