gpt4 book ai didi

swift - 如何将此函数输出为一个简单的字符串?

转载 作者:搜寻专家 更新时间:2023-11-01 07:28:55 24 4
gpt4 key购买 nike

我正在尝试访问我的应用程序中的私有(private) 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] 是一个字符串数组,因此它可以包含多个项目。如果你想要数组中的第一个元素,你可以使用:

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

它等同于 getIFAddresses()[0] 但更安全,因为如果数组为空,调用 getIFAddresses()[0] 将使您的应用程序崩溃。

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

关于swift - 如何将此函数输出为一个简单的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33938075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com