Преобразование неэкранирующего значения в 'T' может позволить ему экранировать Xcode 10 Swift CGPath - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть этот код, он хорошо работал в Xcode 9, но в Xcode 10 я получил эту ошибку. Преобразование неэкранирующего значения в 'T' может позволить ему экранировать

, вот код:

extension CGPath {

    func forEach( body: @convention(block) (CGPathElement) -> Void) {
        typealias Body = @convention(block) (CGPathElement) -> Void
        let callback: @convention(c) (UnsafeMutableRawPointer, UnsafePointer<CGPathElement>) -> Void = { (info, element) in
            let body = unsafeBitCast(info, to: Body.self)
            body(element.pointee)
        }
        print(MemoryLayout.size(ofValue: body))
        let unsafeBody = unsafeBitCast(body, to: UnsafeMutableRawPointer.self)
        self.apply(info: unsafeBody, function: unsafeBitCast(callback, to: CGPathApplierFunction.self))
    }

Я получил эту ошибку для этих двух строчных кодов

 print(MemoryLayout.size(ofValue: body))
            let unsafeBody = unsafeBitCast(body, to: UnsafeMutableRawPointer.self)

для MemoryLayout и unsafeBitCast

1 Ответ

0 голосов
/ 15 сентября 2018

вы добавите @ escape

func forEach( body: @escaping @convention(block) (CGPathElement) -> Void) {

}
...