gpt4 book ai didi

swift - AutoreleasingUnsafeMutablePointer 使应用程序崩溃

转载 作者:行者123 更新时间:2023-11-28 05:43:23 29 4
gpt4 key购买 nike

我从互联网上收到一些数据,如果没有提供则需要猜测编码,所以我使用这个函数 stringEncoding(for:encodingOptions:convertedString:usedLossyConversion:) ,它需要传递 AutoreleasingUnsafeMutablePointer 来接收转换后的字符串,我写的代码是这样的:

var str = "Hello, playground"

func decode(data: Data) -> String? {
var covertedString = NSString()
let stringPointer = AutoreleasingUnsafeMutablePointer<NSString?>(&covertedString)
guard NSString.stringEncoding(for: data, encodingOptions: nil, convertedString: stringPointer, usedLossyConversion: nil) != 0 else {
return nil
}
return covertedString as String
}

let data = str.data(using: .utf8)!
decode(data: data)

虽然我从函数调用中得到的 covertedString 是正确的,但应用程序总是崩溃。知道为什么 AutoreleasingUnsafeMutablePointer 会导致崩溃吗?我试着不传递 convertedString,然后它就不再崩溃了,所以看起来这是根本原因。知道为什么会崩溃吗?

我正在使用 Xcode 版本 10.1 (10B61),Swift 4

最佳答案

在您的特定情况下,问题是您创建了一个 NSString,但随后获取了一个指向 NSString? 的指针,这是另一回事。

但这在这里并不重要。您不会直接创建 AutoreleasingUnsafeMutablePointer(或者通常是任何类型的 UnsafePointer)。不保证它们在您使用时有效。相反,您可以使用 & 隐式创建它们。

func decode(data: Data) -> String? {
var convertedString: NSString? = "" // <- Make sure to make this optional
guard NSString.stringEncoding(for: data,
encodingOptions: nil,
convertedString: &convertedString, // <- Use &
usedLossyConversion: nil) != 0
else {
return nil
}
return convertedString as String?
}

关于swift - AutoreleasingUnsafeMutablePointer 使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55770571/

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