作者:唯美爱人2014 | 来源:互联网 | 2023-02-01 12:17
如何在不使用任何使用Swift 3编程语言的第三方库的情况下获取设备IP地址.实际上我使用以下代码来获取IP地址.
func getIPAddress() -> String? {
var address : String?
var ifaddr : UnsafeMutablePointer = nil
if getifaddrs(&ifaddr) == 0 {
var ptr = ifaddr
while ptr != nil {
defer { ptr = ptr.memory.ifa_next }
let interface = ptr.memory
let addrFamily = interface.ifa_addr.memory.sa_family
if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {
if let name = String.fromCString(interface.ifa_name) where name == "en0" {
var hostname = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0)
getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.memory.sa_len),
&hostname, socklen_t(hostname.count),
nil, socklen_t(0), NI_NUMERICHOST)
address = String.fromCString(hostname)
}
}
}
freeifaddrs(ifaddr)
}
return address
}
但是UnsafeMutablePointer语法不起作用.它通过语法错误.我是否需要导入任何框架试图帮助我.
1> KameshiOS..:
为了获得设备的确切IP地址,我做了以下事情.由于我想包含更新的代码以使用Swift 3获取IP地址,我在这里发布答案.从Swift引用- 获取设备的IP地址
添加#include
您的桥接标题
创建以下功能以获取IP地址.
func getIP()-> String? {
var address: String?
var ifaddr: UnsafeMutablePointer? = nil
if getifaddrs(&ifaddr) == 0 {
var ptr = ifaddr
while ptr != nil {
defer { ptr = ptr?.pointee.ifa_next } // memory has been renamed to pointee in swift 3 so changed memory to pointee
let interface = ptr?.pointee
let addrFamily = interface?.ifa_addr.pointee.sa_family
if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {
if let name: String = String(cString: (interface?.ifa_name)!), name == "en0" { // String.fromCString() is deprecated in Swift 3. So use the following code inorder to get the exact IP Address.
var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
getnameinfo(interface?.ifa_addr, socklen_t((interface?.ifa_addr.pointee.sa_len)!), &hostname, socklen_t(hostname.count), nil, socklen_t(0), NI_NUMERICHOST)
address = String(cString: hostname)
}
}
}
freeifaddrs(ifaddr)
}
return address
}
为了获得IP地址, print(getIP())
验证: - >转到设置 - > Wi-Fi - >单击i符号 - >您可以检查设备的IP地址.
输出屏幕截图: