Как решить проблему "выражение Inout создает временный указатель" в Swift 5.2?
Как мне решить эту проблему, когда я звоню CTParagraphStyleSetting
работать в swift 5.2?
function myFunction() {
var alignment: CTTextAlignment = .left
var settings = CTParagraphStyleSetting(spec: .alignment,
valueSize: 1,
value: &alignment)
}
issue:
Inout expression creates a temporary pointer, but argument 'value' should
be a pointer that outlives the call to 'init(spec:valueSize:value:)'
2 ответа
Решение
В отношении этого обсуждения;
https://forums.swift.org/t/swift-5-2-pointers-and-coretext/34862,
вы можете написать это так:
let alignment: CTTextAlignment = .left
let settings: CTParagraphStyleSetting = withUnsafeBytes(of: alignment) { alignment in
CTParagraphStyleSetting(spec: .alignment, valueSize: 1, value: alignment.baseAddress!)
}
Вот как я реализовал вышеизложенное в классе TLabel:
let paragraphStyleSettings: [CTParagraphStyleSetting] = withUnsafeBytes(of: alignment) { alignmentBP in
withUnsafeBytes(of: lineBreakMode, { lineBreakModeBP in
withUnsafeBytes(of: lineSpacing, { lineSpacingBP in
[
CTParagraphStyleSetting(spec: .alignment, valueSize: MemoryLayout.size(ofValue: alignment), value: alignmentBP.baseAddress!),
CTParagraphStyleSetting(spec: .lineBreakMode, valueSize: MemoryLayout.size(ofValue: lineBreakMode), value: lineBreakModeBP.baseAddress!),
CTParagraphStyleSetting(spec: .lineSpacingAdjustment, valueSize: MemoryLayout.size(ofValue: lineSpacing), value: lineSpacingBP.baseAddress!)
]
})
})
}