标签: swift5.7

任何可识别的都不能符合“可识别”

更新:添加关于 Hashable 的相同错误


我创建了一个Identifiable合规的协议和合规的结构。然后,当我创建列表并在 中引用它时ForEach,我收到错误(关于)Type 'any TestProtocol' cannot conform to 'Identifiable'我收到相同的错误。Hashable

我应该如何修复这个程序?

如果我写ForEach(list, id: \.id) ,它可以工作,但我认为遵守可识别性是没有意义的。

import SwiftUI

protocol TestProtocol: Identifiable, Hashable {
    var id: UUID { get set }
    var name: String { get set }
    
    func greeting() -> String
    static func == (lhs: Self, rhs: Self) -> Bool
}

extension TestProtocol {
    static func == (lhs: Self, rhs: Self) -> Bool {
        return lhs.id == rhs.id
    }
}

struct Person: …
Run Code Online (Sandbox Code Playgroud)

swift swiftui swift5.7

10
推荐指数
1
解决办法
3165
查看次数

iOS16+ 横向显示 UIViewController 仅适用于单屏无法工作 [Swift 5.7]

在 iOS 16 之前,横向呈现单屏对于纵向应用来说是可以的。工作代码如下。

备注整个应用程序仅处于纵向模式。

override public var shouldAutorotate: Bool {
    return false
}

override public var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .landscapeLeft
}

override public var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    return .landscapeLeft
}
Run Code Online (Sandbox Code Playgroud)

我找到了解决方案,但它适用于UIWindowScene,但我需要 UIWindow 中的解决方案。我需要帮助来修复 iOS 16 中的问题。

Xcode - 14.0,iOS - 16.0,模拟器 - 14 Pro

如果有人需要,我可以准备演示。

xcode swift ios16 xcode14 swift5.7

9
推荐指数
2
解决办法
7555
查看次数

如何在 switch case 模式语句中使用 Swift 文字正则表达式?

如何在 switch case 模式语句中使用 Swift 文字正则表达式?

根据 WWDC 2022 演示幻灯片中的示例,以下内容预计可以编译并运行正常:

import Foundation
import RegexBuilder

switch "abc" {
    case /\w+/:
        print("matched!")
    default:
        print("not matched.")
}
Run Code Online (Sandbox Code Playgroud)

但是,会产生以下错误:

类型的表达式模式Regex<Substring>无法匹配类型的值String

是否可以switch case通过某种方式修改带有 Swift 正则表达式文字表达式的语句以使其正常运行?如何在 switch case 模式语句中使用新的 Swift 5.7 正则表达式功能?

regex switch-statement swift swift5.7

7
推荐指数
1
解决办法
983
查看次数

为什么工具链中的 swift 5.7 找不到 Regex?

我相信我正在从命令行运行 Swift 5.7,并且 Swift 5.7 应该具有新的 Regex 类和 /.../ 语法。但似乎并非如此。

我有以下 Swift 源代码“parse.swift”。但 Swift 似乎不理解 Swift 5.7 /.../ 语法来指示 Regex (生成的错误不应该用于合法的 regex 模式),所以我尝试了一种不同的方法,发现它无法识别新的 Regex 类本身。

let pattern = #"^ ,([A-Z][A-Z])([0-9][0-9]),(.*?),(.*?) "#
let regex = try! Regex(pattern)
Run Code Online (Sandbox Code Playgroud)

$ swift parse.swift < somefile

parse.swift:3:18:错误:在范围内找不到“Regex”
让正则表达式 = 尝试!正则表达式(模式)
                 ^~~~~

有什么我需要导入或做不同的事情吗?

这是它说我正在运行的版本:

$ swift --version

Apple Swift 版本 5.7-dev(LLVM eecf02df5133efe、Swift ad06e7d7251311a)
目标:arm64-apple-macosx12.0

我通过从 ~/.zshrc 导出以下内容来选择 5.7 版本的 Swift

export TOOLCHAINS=org.swift.57202206261a
export TOOLCHAIN_DIR=/Library/Developer/Toolchains/swift-5.7-DEVELOPMENT-SNAPSHOT-2022-06-26-a.xctoolchain
Run Code Online (Sandbox Code Playgroud)

regex toolchain swift-compiler swift5.7

5
推荐指数
0
解决办法
271
查看次数

编译错误“实例方法‘someMethod’中函数类型的可发送性与协议‘SomeProtocol’中的要求不匹配”iOS 16 Swift 5.7

更新到 Xcode 14、iOS 16、Swift 5.7 后,编译项目时我得到:

Sendability of function types in instance method 'addObserver(forName:object:queue:using:)' does not match requirement in protocol 'NotificationCenterProtocol'
Run Code Online (Sandbox Code Playgroud)

ios swift ios16 swift5.7

2
推荐指数
1
解决办法
751
查看次数