arrays - 有没有办法转换 UnsafeMutablePointer到 UnsafeMutablePointer?
问题描述
请在继续之前阅读编辑
在 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 > 中输入一个字符串,例如“一些参数”。我这样做的方式是错误的,所以请按照马特的解释。
解决方案
AC 字符串是一个Unsafe[Mutable]Pointer<Int8>
. 有多种方法可以从 Swift 字符串中派生出 C 字符串,你就是这样。
为了演示,我将从一个采用UnsafeMutablePointer<Int8>
. 这是界面:
#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
打印在日志中。有效。
推荐阅读
- amazon-web-services - 使用代码授予的简单 Cognito 用户身份验证不起作用
- tensorflow - tensorflow keras 保存和加载模型
- sql-server - (T-SQL) 夏令时是否发生在最后一小时?
- c# - C# PasswordDeriveBytes:似乎 Salt 无关紧要
- dynamics-crm - 了解 FetchXML 中的链接实体
- ios - 为什么没有状态栏的新 iPad 上的 safeAreaInsets 和 safeAreaLayoutGuide 看起来不对?
- typescript - 如何检查我的属性是否存在于类型中
- python - 来自多个模型的 Django 过滤器
- mongodb - 通过 MongoDB (docker) 进行 CAS 授权
- javascript - 如何让服务器在普通的 PHP / SQL 网站后面执行任务?