首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有办法将UnsafeMutablePointer<String>转换为UnsafeMutablePointer<Int8>吗?

有办法将UnsafeMutablePointer<String>转换为UnsafeMutablePointer<Int8>吗?
EN

Stack Overflow用户
提问于 2020-10-05 21:36:18
回答 1查看 155关注 0票数 0

在进行之前请阅读编辑

在Swift中,我一直在与UnsafeMutablePointer混在一起,我做了许多例子,例如

代码语言:javascript
复制
var char: [String] = ["0","281411","-78","521074","-3","344657","132","347776","-93","25","44"]
let pointer: UnsafeMutablePointer<Int8> = UnsafeMutablePointer(mutating: char)

但是每次运行它都会给出以下错误

代码语言:javascript
复制
Cannot assign value of type 'UnsafeMutablePointer<String>' to type 'UnsafeMutablePointer<Int8>'

那么,这是否意味着UnsafeMutablePointer不能转换为UnsafeMutablePointer?

任何指导我正确方向的建议都是有帮助的。提前谢谢你。

编辑:你好各位,让我澄清一下,var char: String是错误的。Matt很好地解释了字符串如何进入UnsafeMutablePointer < Int8 >。您可以在UnsafeMutablePointer < Int8 >中输入一个字符串,例如“一些参数”。我这样做是错误的,所以遵循马特的解释。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-05 21:54:21

C字符串是Unsafe[Mutable]Pointer<Int8>。有一些方法可以从Swift字符串派生出C字符串,您就在这里。

为了演示,我将从一个使用UnsafeMutablePointer<Int8>的Objective方法开始。下面是接口:

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface Thing : NSObject

- (void) passMeACString: (nonnull char[]) s;

@end

下面是实现;它只打印接收到的C字符串,因此我们知道我们得到了一个:

代码语言:javascript
复制
#import "Thing.h"

@implementation Thing

- (void) passMeACString: (nonnull char[]) s {
    NSLog(@"%s", s);
}

@end

现在,如果您查看生成的接口,您将看到以下内容:

代码语言:javascript
复制
open class Thing : NSObject {
    open func passMeACString(_ s: UnsafeMutablePointer<Int8>)
}

所以你看到了吗?它需要一个UnsafeMutablePointer<Int8>。现在我要用Swift制作一个:

代码语言:javascript
复制
    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被打印在日志中。啊,真灵。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64216519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档