【问题标题】:CMutablePointer<NSRange> dead endCMutablePointer<NSRange> 死胡同
【发布时间】:2014-06-27 15:02:34
【问题描述】:

我正在尝试在 Swift 中调用 NSLayoutManager 对象的 lineFragmentRectForGlyphAtIndex 方法。它的描述是:

func lineFragmentRectForGlyphAtIndex(glyphIndex: Int, effectiveRange: CMutablePointer<NSRange>)

但我不知道我应该怎么称呼它。根据 Apple 文档,我必须这样称呼它:

let someRange : NSRange = ...
layoutManager.lineFragmentRectForGlyphAtIndex(0, effectiveRange: &someRange)

这就是文档所说的。但我收到一个错误:“NSRange”不是“@lvalue $T5”的子类型

我该怎么办?

【问题讨论】:

    标签: cocoa-touch cocoa swift


    【解决方案1】:

    尝试将其设为var 而不是let:

    var someRange: NSRange = ...
    layoutManager.lineFragmentRectForGlyphAtIndex(0, effectiveRange: &someRange)
    

    基本上:在var 上使用&amp; 可以使您与CMutablePointer 兼容,但let 不应该是可变的。因此出现类型错误。

    如果你想传递一个空指针,只需写nil而不是&amp;someRange(当然你不需要声明额外的var)。

    【讨论】:

    • 如何将 nil 范围传递给“lineFragmentRectForGlyphAtIndex”? “var someRange:NSRange?”不起作用,我收到错误“找不到接受提供的参数的 'lineFragmentRectForGlyphAtIndex' 的重载”
    猜你喜欢
    • 2021-05-13
    • 2017-09-28
    • 1970-01-01
    • 2019-07-15
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    相关资源
    最近更新 更多