即使没有网络连接,我也会收到超时错误。我正在使用Alamofire发送请求。我已经看到了检查网络连接的方法,例如如何在Swift中使用SCNetworkReachability,但据我所读,最好发送请求而不是在每个请求之前检查网络连接。我的问题是,即使没有网络连接,为什么还会引发超时错误?有没有一种方法可以检查两者之间的距离,还是应该在超时的情况下仅检查网络的可达性。
import Foundation
import Alamofire
var config = URLSessionConfiguration.default
var manager: SessionManager? = nil
var configured: Bool = false
let formatter = DateFormatter()
let postURL = URL(string: "http://httpbin.org/post")!
func postStatus(deviceID: String, status: Bool, latitude: Double, longitude: Double){
print("\nPosting")
if(!configured){
print("Configuring")
config.timeoutIntervalForResource = 4
config.timeoutIntervalForRequest = 4
manager = Alamofire.SessionManager(configuration: config)
configured = true
}else{
print("Configured\n")
}
let postData: [String: Any] = ["deviceID": deviceID, "status": 0, "lat": String(latitude), "long": String(longitude), "timestamp": getCurrentTime()]
manager?.request(postURL, method: HTTPMethod.post, parameters: postData, encoding: JSONEncoding.default, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下代码加载图像,但我不知道如何在Swift中执行此操作.
该CGImage参考说,我应该传递NULL作为参数,但由于NULL是不是斯威夫特语言的一部分,这是不可能的.我是否必须使用UnsafePointer,如果是,如何使用?
var img = CGImageCreateWithPNGDataProvider(CGDataProviderCreateWithFilename("/Resources/image.png"),**?**, true,kCGRenderingIntentDefault)
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我正在尝试跟踪网络状态.我查看了FXReachability的代码.具体如下方法.
- (void)setHost:(NSString *)host
{
if (host != _host)
{
if (_reachability)
{
SCNetworkReachabilityUnscheduleFromRunLoop(_reachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);
CFRelease(_reachability);
}
_host = [host copy];
_status = FXReachabilityStatusUnknown;
_reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [_host UTF8String]);
SCNetworkReachabilityContext context = { 0, ( __bridge void *)self, NULL, NULL, NULL };
SCNetworkReachabilitySetCallback(_reachability, ONEReachabilityCallback, &context);
SCNetworkReachabilityScheduleWithRunLoop(_reachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);
}
}
Run Code Online (Sandbox Code Playgroud)
它的作用是不断检查与指定主机的连接.我正在尝试将此方法转换为Swift,我遇到了一些问题.
1.将主机字符串转换为UTF8.
我必须将主机字符串转换为UTF8并将其传递给SCNetworkReachabilityCreateWithName方法.我无法UTF8String在Objective-C中找到Swift的确切属性.但是,有一个叫做属性utf8的String类型.根据文件,
您可以通过迭代其utf8属性来访问String的UTF-8表示.此属性的类型为String.UTF8View,它是无符号8位(UInt8)值的集合,一个用于字符串的UTF-8表示形式中的每个字节:
如何获得字符串的完整UTF8表示而不是无符号8位(UInt8)值的集合?
2. SCNetworkReachabilitySetCallback的回调函数.
此函数的第二个参数需要某种类型SCNetworkReachabilityCallBack.我潜入了源文件,发现它实际上是一个typealias.
typealias SCNetworkReachabilityCallBack = CFunctionPointer<((SCNetworkReachability!, …Run Code Online (Sandbox Code Playgroud) 我有这个代码用于检查互联网连接,它工作得非常好,直到我更新到Xcode 8和swift 3.现在它对于蜂窝网络返回false,对于WiFi网络则为真,我不知道为什么.
这是代码:
open class Reachability {
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
}
}
var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
return false
}
let isReachable = flags == .reachable
let …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
let networkStatus = CTTelephonyNetworkInfo()
func getCellularInfo() {
if #available(iOS 12.0, *) {
var info = networkStatus.serviceSubscriberCellularProviders
if let aKey = networkStatus.value(forKey: "serviceSubscriberCellularProvider") {
print("aKey: \(aKey)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
此代码返回:
aKey: { 0000000100000001 = "CTCarrier (0x28282e610) {\n\tCarrier name: [Vodacom]\n\tMobile Country Code: [655]\n\tMobile Network Code:[01]\n\tISO Country Code:[za] \n\t允许 VOIP?[是]\n}\n"; }
我对这种方法不熟悉,我如何获取与键关联的值,例如 \n\tMobile Country Code: [655]/n/
我想在xcode 9中实现可达性功能,但是在达到可达性类时出现此错误,如何解决此错误?“类型为“ SCNetworkReachability的值?” 没有成员“ takeRetainedValue””。这是我的代码
import UIKit
import Foundation
import SystemConfiguration
public class reachability {
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue()
}
var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 {
return false
}
let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0 …Run Code Online (Sandbox Code Playgroud) 我尝试检查我的应用程序中的互联网连接时收到此错误.
我使用Xcode 7.1.1 Swift 2.0
代码块如下
public class Reach {
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress, {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))//.takeRetainedValue()
})
var flags: SCNetworkReachabilityFlags = []
if SCNetworkReachabilityGetFlags( defaultRouteReachability!, &flags) == false {
return false
}
//The following two lines shows the error
let isReachable = (flags & (kSCNetworkFlagsReachable)) != …Run Code Online (Sandbox Code Playgroud)