我正在尝试使用Swift代码进行简单的DNS查找。到目前为止,我有
if host != "\0" {
let hostRef = CFHostCreateWithName(kCFAllocatorDefault, host.bridgeToObjectiveC()).takeRetainedValue()
var resolved = CFHostStartInfoResolution(hostRef, CFHostInfoType.Addresses, nil)
let addresses = CFHostGetAddressing(hostRef, &resolved).takeRetainedValue() as NSArray
for address: AnyObject in addresses {
println(address) // address is of type NSData.
}
}
根据Convert NSData to sockaddr struct in swift。 (host
是NSString
。)
但是,在执行<10020000 4a7de064 00000000 00000000>
语句并打印EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
数据之后,在第一行以if
退出之前,调试器日志会打印address
。我要获取的只是一个带有IP地址的字符串,或者如果主机不存在,则为一个空字符串。
我已经测试并发现AnyObject
是崩溃的原因。您不需要AnyObject
,因为swift会从数组addresses
推断类型。>
var host = "192.168.103.13"
if host != "\0" {
let hostRef = CFHostCreateWithName(kCFAllocatorDefault, host.bridgeToObjectiveC()).takeRetainedValue()
var resolved = CFHostStartInfoResolution(hostRef, CFHostInfoType.Addresses, nil)
let addresses = CFHostGetAddressing(hostRef, &resolved).takeRetainedValue() as NSArray
println(addresses)
//Remove `AnyObject` as there is no need.Swift will infrence from array addresses
for address in addresses {
println(address) // address is of type NSData.
}
}