在Swift [duplicate]中进行简单的DNS查找

问题描述 投票:0回答:1

我正在尝试使用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。 (hostNSString。)

但是,在执行<10020000 4a7de064 00000000 00000000>语句并打印EXC_BAD_ACCESS (code=EXC_I386_GPFLT)数据之后,在第一行以if退出之前,调试器日志会打印address。我要获取的只是一个带有IP地址的字符串,或者如果主机不存在,则为一个空字符串。

macos dns swift nsdata nslookup
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.
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.