gpt4 book ai didi

ios - 使用 Xcode 在 Swift 中 Ping 本地主机

转载 作者:行者123 更新时间:2023-12-05 04:42:51 24 4
gpt4 key购买 nike

最终我的 Swift 前端将对外部服务器进行 API 调用,但在开发过程中,我想在我的计算机上进行本地测试。如何从 Xcode 访问我的本地主机服务器?在这一点上,我只是想确保联系——我还不需要实际检索任何东西。

到目前为止,我有以下代码:

let urlString = "MY_IP_ADDRESS"
let url = URL(string: urlString)!

do {
try url.checkResourceIsReachable()
print("Success!")
} catch {
print("Failure!")
}

urlString 变量中,我尝试了我的实际 IP 地址。我还尝试了 localhost:4001/hello,其中 4001 是我的 node.js 服务器监听的端口,我定义了 /hello。我是否使用了错误的地址、错误的代码,或者无法从 Xcode 联系我的本地机器?

最佳答案

如果您在catch block 中print(error)(这始终是一个好习惯——print("Failure!")没有告诉你 为什么 catch block 被调用)你会注意到有一个错误告诉你:

The file couldn’t be opened because the specified URL type isn’t supported.

虽然没有明确说明,但我认为这里的含义是 checkResourceIsReachable 用于文件系统 URL——而不是远程 http 请求。

相反,使用一个系统来验证 URL 是否可以访问远程资源。

import SwiftUI
import Combine

class CheckURL : ObservableObject {
enum URLResult : String {
case unknown, unreachable, reachable
}

@Published var urlReachable : URLResult = .unknown
private var cancellable : AnyCancellable?

func verifyURL(urlPath: String) {
guard let url = URL(string: urlPath) else {
assertionFailure("Invalid URL")
self.urlReachable = .unknown
return
}

var request = URLRequest(url: url)
request.httpMethod = "HEAD"

cancellable = URLSession.shared.dataTaskPublisher(for: url).tryMap({ (_ , response: URLResponse) -> URLResult in
if let response = response as? HTTPURLResponse, response.statusCode == 200 {
return .reachable
} else {
return .unreachable
}
})
.replaceError(with: .unreachable)
.receive(on: RunLoop.main).sink { result in
self.urlReachable = result
}
}
}

struct ContentView : View {
@StateObject private var urlChecker = CheckURL()

var body: some View {
Text("Reachable? \(urlChecker.urlReachable.rawValue)")
.onAppear {
urlChecker.verifyURL(urlPath: "http://localhost:4001/")
}
}
}

如评论中所述,您需要确保在您的 Info.plist 中将 NSAllowsArbitraryLoads 设置为 YES

关于ios - 使用 Xcode 在 Swift 中 Ping 本地主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69763450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com