在进行之前请阅读编辑
在Swift中,我一直在与UnsafeMutablePointer混在一起,我做了许多例子,例如
var char: [String] = ["0","281411","-78","521074","-3","344657","132","347776","-93","25","44"]
let pointer: UnsafeMutablePointer<Int8> = UnsafeMutablePointer(mutating: char)但是每次运行它都会给出以下错误
Cannot assign value of type 'UnsafeMutablePointer<String>' to type 'UnsafeMutablePointer<Int8>'那么,这是否意味着UnsafeMutablePointer不能转换为UnsafeMutablePointer?
任何指导我正确方向的建议都是有帮助的。提前谢谢你。
编辑:你好各位,让我澄清一下,var char: String是错误的。Matt很好地解释了字符串如何进入UnsafeMutablePointer < Int8 >。您可以在UnsafeMutablePointer < Int8 >中输入一个字符串,例如“一些参数”。我这样做是错误的,所以遵循马特的解释。
发布于 2020-10-05 21:54:21
C字符串是Unsafe[Mutable]Pointer<Int8>。有一些方法可以从Swift字符串派生出C字符串,您就在这里。
为了演示,我将从一个使用UnsafeMutablePointer<Int8>的Objective方法开始。下面是接口:
#import <Foundation/Foundation.h>
@interface Thing : NSObject
- (void) passMeACString: (nonnull char[]) s;
@end下面是实现;它只打印接收到的C字符串,因此我们知道我们得到了一个:
#import "Thing.h"
@implementation Thing
- (void) passMeACString: (nonnull char[]) s {
NSLog(@"%s", s);
}
@end现在,如果您查看生成的接口,您将看到以下内容:
open class Thing : NSObject {
open func passMeACString(_ s: UnsafeMutablePointer<Int8>)
}所以你看到了吗?它需要一个UnsafeMutablePointer<Int8>。现在我要用Swift制作一个:
let s = "0,281411,-78,521074,-3,344657,132,347776,-93,25,44"
var arr = s.cString(using: .utf8)!
let t = Thing()
t.passMeACString(&arr)结果:0,281411,-78,521074,-3,344657,132,347776,-93,25,44被打印在日志中。啊,真灵。
https://stackoverflow.com/questions/64216519
复制相似问题