当前位置:  开发笔记 > IOS > 正文

Swift错误:'&'与'UnsafeMutablePointer'类型的非inout参数一起使用

如何解决《Swift错误:'&'与'UnsafeMutablePointer'类型的非inout参数一起使用》经验,为你挑选了1个好方法。

我正在尝试从此转换以下Objective-C代码(源代码)

-(CGRect) dimensionsForAttributedString: (NSAttributedString *) asp {

    CGFloat ascent = 0, descent = 0, width = 0;
    CTLineRef line = CTLineCreateWithAttributedString( (CFAttributedStringRef) asp);

    width = CTLineGetTypographicBounds( line, &ascent, &descent, NULL );

    // ...
}

进入斯威夫特:

func dimensionsForAttributedString(asp: NSAttributedString) -> CGRect {

    let ascent: CGFloat = 0
    let descent: CGFloat = 0
    var width: CGFloat = 0
    let line: CTLineRef = CTLineCreateWithAttributedString(asp)

    width = CTLineGetTypographicBounds(line, &ascent, &descent, nil)

    // ...
}

但我&ascent在这一行得到错误:

width = CTLineGetTypographicBounds(line, &ascent, &descent, nil)

'&'与'UnsafeMutablePointer'类型的非inout参数一起使用

Xcode建议我通过删除修复它&.但是,当我这样做时,我得到了错误

无法将'CGFloat'类型的值转换为预期的参数类型'UnsafeMutablePointer'

在使用C API的文档交互使用&的语法,所以我看不出有什么问题.我该如何解决这个错误?



1> Martin R..:

ascent并且descent必须是变量才能作为in-out参数传递&:

var ascent: CGFloat = 0
var descent: CGFloat = 0
let line: CTLineRef = CTLineCreateWithAttributedString(asp)
let width = CGFloat(CTLineGetTypographicBounds(line, &ascent, &descent, nil))

返回时CTLineGetTypographicBounds(),这些变量将设置为线的上升和下降.另请注意,此函数返回a Double,因此您需要将其转换为CGFloat.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有