无法将“Int”类型的值转换为预期的参数类型“(inout UnsafeMutableBufferPointer<_>, inout Int) throws -> Void”

Posted

技术标签:

【中文标题】无法将“Int”类型的值转换为预期的参数类型“(inout UnsafeMutableBufferPointer<_>, inout Int) throws -> Void”【英文标题】:Cannot convert value of type 'Int' to expected argument type '(inout UnsafeMutableBufferPointer<_>, inout Int) throws -> Void' 【发布时间】:2019-05-15 05:07:24 【问题描述】:

这行var machine = [CChar](_unsafeUninitializedCapacity: size, initializingWith: 0) 抛出错误。

错误信息:

无法将“Int”类型的值转换为预期的参数类型“(inout UnsafeMutableBufferPointer<_>, inout Int) throws -> Void”

这是我的代码:

struct MailTemplate 
    let destination = "test@gmail.com"
    let subject = "Test"
    let body:String

    init()
        let appVersion: String! = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
        var platform: String 
            var size: Int = 0
            sysctlbyname("hw.machine", nil, &size, nil, 0)
            var machine = [CChar](_unsafeUninitializedCapacity: size, initializingWith: 0)
            sysctlbyname("hw.machine", &machine, &size, nil, 0)
            return String.fromCString(machine)!
        
        body = "Email Body"
    
 

【问题讨论】:

【参考方案1】:

我得到了答案,

initializingWith: _,_ in

这样:

var machine = [CChar](_unsafeUninitializedCapacity: size, initializingWith: _,_ in)

【讨论】:

【参考方案2】:

inout 参数是那些将被我们传递给它的函数修改的参数。因此,您需要将其传递为&amp;size

【讨论】:

当我传递大小时,我得到了这个错误:无法将类型“Int”的值转换为预期的参数类型“(inout UnsafeMutableBufferPointer,inout Int)抛出-> Void'(又名'( inout UnsafeMutableBufferPointer, inout Int) throws -> ()') 你需要传递一个函数。 '(x, y) throws -> Void' 是一个函数签名,您将 int 传递给它。但是inout参数需要按照我上面提到的方式发送

以上是关于无法将“Int”类型的值转换为预期的参数类型“(inout UnsafeMutableBufferPointer<_>, inout Int) throws -> Void”的主要内容,如果未能解决你的问题,请参考以下文章

无法将类型“[Surah]”的值转换为预期的参数类型“Range<Int>”

如何在此 for 循环中修复'无法将'String'类型的值转换为预期的参数类型'Int'

在 swift assert(0) 中无法将 Int 类型的值转换为预期的参数类型 Bool

无法将“Binding<Int>”类型的值转换为预期的参数类型“Binding<_>”

无法将类型“Range<Int32>”的值转换为预期的参数类型“Range<_>”

无法将“Int”类型的值转换为预期的参数类型“(inout UnsafeMutableBufferPointer<_>, inout Int) throws -> Void”