我想获得访问我的应用程序中的私有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.
[String]是您想要将数组值分配给字符串的字符串数组,首先将值从getIFAddresses()分配给数组,如let arr = getIFAddresses(),并尝试访问该数组中的第一个对象.privateIp.title = arr.first –
哦,谢谢。我现在编辑它。 – bandoy123