如何将此函数输出为简单字符串?

时间:2015-11-26 11:55:29

标签: swift

我正在尝试访问我的应用程序中的私有IP,我有以下代码获取本地IP并返回它。问题是它返回一个[String]而不是String,每次我尝试使用它时都会出错。以下是代码(来自How to get Ip address in swift):

func getIFAddresses() -> [String] {
    var addresses = [String]()

    // Get list of all interfaces on the local machine:
    var ifaddr : UnsafeMutablePointer<ifaddrs> = nil
    if getifaddrs(&ifaddr) == 0 {

        // For each interface ...
        for (var ptr = ifaddr; ptr != nil; ptr = ptr.memory.ifa_next) {
            let flags = Int32(ptr.memory.ifa_flags)
            var addr = ptr.memory.ifa_addr.memory

            // Check for running IPv4, IPv6 interfaces. Skip the loopback interface.
            if (flags & (IFF_UP|IFF_RUNNING|IFF_LOOPBACK)) == (IFF_UP|IFF_RUNNING) {
                if addr.sa_family == UInt8(AF_INET) || addr.sa_family == UInt8(AF_INET6) {

                    // Convert interface address to a human readable string:
                    var hostname = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0)
                    if (getnameinfo(&addr, socklen_t(addr.sa_len), &hostname, socklen_t(hostname.count),
                        nil, socklen_t(0), NI_NUMERICHOST) == 0) {
                            if let address = String.fromCString(hostname) {
                                addresses.append(address)
                            }
                    }
                }
            }
        }
        freeifaddrs(ifaddr)
    }
    print(addresses)


    return addresses
}

以下是我尝试使用它的方法:

self.privateIp.title = getIFAddresses()

然而,当我这样做时,我收到一个错误:

  

无法指定类型&#34; [String]&#34;的值类型为&#34;字符串&#34;。

如果我尝试像这样投射:

self.privateIp.title = getIFAddresses() as! String

我收到以下错误:

  

来自&#39; [String]&#39;到不相关的类型&#39; String&#39;总是失败。

1 个答案:

答案 0 :(得分:2)

[String]是一个字符串数组,因此它可以包含多个项目。 如果你想要数组中的第一个元素,你可以使用:

if let ipAdd = getIFAddresses().first {
    self.privateIp.title = ipAdd
}

相当于getIFAddresses()[0],但更安全,因为如果数组为空,则调用getIFAddresses()[0]会使您的应用崩溃。

您可以调用last来获取最后一个,也可以枚举数组中的所有项目。