2015-11-26 51 views
1

我想获得访问我的应用程序中的私有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() 

但是当我这样做,我得到一个错误:

Cannot assign a value of type "[String]" to a value of type "String".

如果我试着像这样施放它:

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

我得到以下错误:

Cast from '[String]' to unrelated type 'String' always fails.

+0

[String]是您想要将数组值分配给字符串的字符串数组,首先将值从getIFAddresses()分配给数组,如let arr = getIFAddresses(),并尝试访问该数组中的第一个对象.privateIp.title = arr.first –

+0

哦,谢谢。我现在编辑它。 – bandoy123

回答

2

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

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

这相当于getIFAddresses()[0]但更安全,因为如果数组是getIFAddresses()[0]空的通话将崩溃的应用程序。

您可以致电last以获取最后一个,或者您可以枚举数组中的所有项目。

+0

谢谢!我会在5分钟内接受这个最佳答案:D – bandoy123

相关问题