100天Swift学习挑战#1:http网络请求与spawn子进程
开始教程之前,尝试了几个常用的NodeJS逻辑的Swift实现
发起网络请求
js里面axios非常方便,swift貌似没有axios支持,但是有Alamofire,然而Swift Package Manage实在是太难搞了,添加半天结果网络错误,于是先尝试不用库的实现:
let session = URLSession.shared
let url = URL(string: "https://example.com")!
let task = session.dataTask(with: url, completionHandler: { data, response, error in
guard error == nil else {
print(error)
return
}
print(data)
})
task.resume()
看起来非常像JS的异步请求,估计可以有类似async/await的处理方式
以上是通用的请求,如果仅仅是发起一个不自定义header的get请求,有更方便的方式(类似PHP的filegetcontent)
let url = URL(string: "https://example.com")!
let data = try Data(contentsOf: url)
print(data)
child_process的spawn子进程
运行子进程并且获取进程的输出
let runloop = RunLoop.current
let process = Process()
process.executableURL = homeDirURL.appendingPathComponent(".v2ray")
process.arguments = ["-config", homeDirURL.appendingPathComponent(".config.json").path]
let pipe = Pipe()
process.standardOutput = pipe
pipe.fileHandleForReading.readabilityHandler = { fileHandle in
let data = fileHandle.availableData
let message = String(data: data, encoding: .utf8) ?? ""
print(message)
}
try? process.run()
while runloop.run(mode: .default, before: Date(timeIntervalSinceNow: 2)) { }
和Node不同的是,父进程被终止后,子进程不会自动退出,暂时没有找到方法。
文章原始链接:https://sijie.wang/posts/swift-challenge-1
本站文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请保留原始链接
发表评论