我正在尝试访问我的应用程序中的私有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;总是失败。
答案 0 :(得分:2)
[String]
是一个字符串数组,因此它可以包含多个项目。
如果你想要数组中的第一个元素,你可以使用:
if let ipAdd = getIFAddresses().first {
self.privateIp.title = ipAdd
}
相当于getIFAddresses()[0]
,但更安全,因为如果数组为空,则调用getIFAddresses()[0]
会使您的应用崩溃。
您可以调用last
来获取最后一个,也可以枚举数组中的所有项目。