0

我正在尝试使用 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>以 a 退出之前打印。我想要得到的只是一个带有 IP 地址的字符串,或者如果主机不存在,则为一个空字符串。EXC_BAD_ACCESS (code=EXC_I386_GPFLT)ifaddress

4

1 回答 1

0

我已经测试并发现这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.
        }
    }
于 2014-07-22T21:32:38.880 回答