解决Xcode 11 beta 5中的SwiftUI路径崩溃

时间:2019-08-18 16:22:22

标签: ios swiftui

Apple在Xcode 11 beta 5中破坏了Path

  

使用Path结构时,Xcode 11 beta 5中的一个已知问题导致您的应用崩溃。

因此,我正在尝试使用CGMutablePath解决此问题:

   var body: some View {
        GeometryReader { geometry in
            let path = CGMutablePath()
            path.addRect(CGRect(x: 0, y: 0, width: 100, height: 100))
            return Path(path)
        }
    }

这画了一个正方形。

当我尝试如下更改颜色时:

    var body: some View {
        GeometryReader { geometry in
            let path = CGMutablePath()
            path.addRect(CGRect(x: 0, y: 0, width: 100, height: 100))
            return Path(path).fill(Color.purple)
        }
    }

我得到:

Cannot convert return expression of type 'GeometryReader<_>' to return type 'some View'
Function declares an opaque return type, but has no return statements in its body from which to infer an underlying type

我不确定要使用哪种返回类型?我尝试了Path,但显然fill不会再返回另一个Path

我尝试了View,但得到了:

Protocol 'View' can only be used as a generic constraint because it has Self or associated type requirements

我尝试了some View,但它似乎都没有解析。

2 个答案:

答案 0 :(得分:3)

iOS 13 beta 7发行说明说它已在Xcode 11 beta 6中修复,因此我们只需要等待它发布即可。希望明天!

来自release notes

已解决的问题

如果您使用的是Xcode 11 beta 6及更高版本中包含的SDK,则使用Path结构不再会导致您的应用崩溃。 (53523206)

答案 1 :(得分:0)

它仍然会崩溃...路径太断了!但是,如果您对如何成功进行编译感到好奇,则可以执行以下操作:

struct MyShape: View {
    @State private var flag = false

    var body: some View {
        return GeometryReader { (geometry) -> AnyView in
            let path = CGMutablePath()
            path.addRect(CGRect(x: 0, y: 0, width: 100, height: 100))
            return AnyView(Path(path).fill(Color.purple))
        }
    }
}

它将在路径(路径)上崩溃