首页 > 解决方案 > 有没有办法转换 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 > 中输入一个字符串,例如“一些参数”。我这样做的方式是错误的,所以请按照马特的解释。

标签: arraysswift

解决方案


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打印在日志中。有效。


推荐阅读