AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-1987726

Reinhard Männer's questions

Martin Hope
Reinhard Männer
Asked: 2024-09-29 22:19:39 +0800 CST

如何使用带参数的 Swift Testing 测试通用函数?

  • 6

设置:
我的应用程序有一个通用函数,可以对其中心的任意元素的二次矩阵进行点镜像:

func pointMirroredMatrix<T>(_ matrix: inout [[T]]) {
    assert(matrix.count > 0 && matrix[0].count > 0) // Ensure matrix is not empty
    assert(matrix.count == matrix[0].count) // Ensure matrix is quadratic
    let n = matrix.count // The matrix is n x n
    for row in 0 ..< n/2 {
        for col in 0 ..< n {
            // Swapping elements
            (matrix[row][col], matrix[n - 1 - row][n - 1 - col]) = (matrix[n - 1 - row][n - 1 - col], matrix[row][col])
        }
    }
}

我想编写一个 Swift 测试来检查它是否func pointMirroredMatrix正常工作。
因此我首先定义:

typealias PointMirroredMatrixParams = (matrix: [[Any]], expectedResult: [[Any]])
let pointMirroredMatrixArgs: [PointMirroredMatrixParams] = [(matrix:         [[0, 1], [0, 0]], 
                                                             expectedResult: [[0, 0], [1, 0]])]

struct VisionTests {
    
    @Test("pointMirroredMatrix", arguments: pointMirroredMatrixArgs)
    func pointMirroredMatrix(p: PointMirroredMatrixParams) throws {
        // see below
    }  

请注意,矩阵元素的类型为Any,因为@Test不允许使用泛型。
测试应执行以下操作:

var mirroredMatrix = deepCopyMatrix(p.matrix) // Make deep copy
vision.pointMirroredMatrix(&mirroredMatrix) // Mirror the copy
let mirroredCorrectly = maticesAreEqual(p.expectedResult, mirroredMatrix)
#expect(mirroredCorrectly)  

问题:
我无法写入func maticesAreEqual,因为测试参数传递的矩阵是类型Any。我尝试了以下操作,但没有成功:

func maticesAreEqual(_ matrix1: [[Any]], _ matrix2: [[Any]]) -> Bool {
    guard matrix1.count == matrix2.count else { return false }
    guard matrix1[0].count == matrix2[0].count else { return false }
    guard !matrix1.isEmpty else { return true }
    guard type(of: matrix1[0][0]) == type(of: matrix2[0][0]) else { return false }
    guard type(of: matrix1[0][0]) == (any Equatable).self else { return false }
    // Here it is known that both matrices have the same dimension, their elements are of the same type and are equatable
    // But how to find out if they are equal?
    for i in 0 ..< matrix1.count {
        for j in 0 ..< matrix1[i].count {
            if matrix1[i][j] != matrix2[i][j] { return false } // Build error
        }
    }
    return true
}  

但由于类型原因,内循环中的指令无法编译Any。我收到错误Type 'Any' cannot conform to 'Collection'。

我的问题:
如何func pointMirroredMatrix使用传入的具有不同类型元素的矩阵进行测试@Test?

swift
  • 1 个回答
  • 25 Views
Martin Hope
Reinhard Männer
Asked: 2024-09-25 19:22:12 +0800 CST

无法检查可相等元组的二维数组是否相等

  • 6

我不明白以下情况:

let a1: [[Double]] = [[1]]
let equ1 = a1 == a1 // This builds

let t1: (Double, Double) = (1, 1)
let equ2 = t1 == t1 // This builds also

let a2: [[(Double, Double)]]  = [[(1,1)]]
let equ3 = a2 == a2 // This gives a build error

构建错误是

Binary operator '==' cannot be applied to two '[[(Double, Double)]]' operands  

Double为什么我可以检查2 的元组的二维数组是否相等Doubles,但不能检查这个元组的二维数组是否相等?

swift
  • 2 个回答
  • 16 Views
Martin Hope
Reinhard Männer
Asked: 2024-07-03 18:56:17 +0800 CST

如何访问 Swift 6 并发安全的静态属性?

  • 7

我的应用程序使用一个类A及其子类SubA_x。 A有一个静态属性,该属性仅在初始化子类时serialNumber由类修改。它设置一个属性,以便每个子类都有一个唯一的名称。以下是代码:Alet name

class A {
    static var serialNumber = 0
    let name: String

    init( /* some parameters */ ) {
        A.serialNumber += 1
        self.name = "\(A.serialNumber)"
    }
}

final class SubA_1: A {
    init( /* some parameters */ ) {
        super.init( /* some parameters */ )
    }
}

使用 Swift 6 严格并发检查时,初始化的行serialNumber会出现错误

静态属性“serialNumber”不是并发安全的,因为它是非独立的全局共享可变状态

我知道每个子类都A可以var serialNumber从任何线程进行修改,因此数据竞争是可能的。

但是我如何以并发安全的方式实现此功能?

serialNumber我尝试通过演员提供:

actor SerialNumberManager {
    private var serialNumber = 0
    
    func getNextSerialNumber() -> Int {
        serialNumber += 1
        return serialNumber
    }
}

但我无法getNextSerialNumber()在 中调用init,除非init是异步的。但我只能在异步上下文中初始化子类,等等。

我可能可以根据 GCD 提供自己的同步,但应该有一种方法可以在 Swift 并发中做到这一点。

swift
  • 1 个回答
  • 54 Views
Martin Hope
Reinhard Männer
Asked: 2023-10-15 19:35:47 +0800 CST

如何在 MacOS 下缩进 Python3 中的块?

  • 5

我正在学习Python3。它通过运行在 MacOS/终端上执行python3。
我能够执行《使用 Python 进行深度学习,第二版》一书中的一些示例,但我现在遇到了一个简单的编辑器问题:
如果我输入以下语句

>>> with tf.GradientTape as tape:
...     tape.watch(input_const)
...     result = tf.square(input_const)
... 

我无法终止缩进块。
如果我只是输入return,我会收到错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: __enter__
>>> 

我尝试使用Shift [、Shift tab、 和终止缩进Control [,但这不起作用。
如何缩进一个块?

我在这里发现了类似的问题,但没有解决方案。

python
  • 2 个回答
  • 38 Views
Martin Hope
Reinhard Männer
Asked: 2023-09-03 23:02:56 +0800 CST

如何在 SwiftUI 中垂直显示一组旋转图像?

  • 5

hand我的应用程序有一个带有 property 的结构体数组let blatt: Image。在 期间init, anImage被分配给该属性。

为了水平显示这样的数组,我使用以下代码(scaledWidth是一些常量):

HStack(spacing: 10) {
    ForEach((0 ..< hand.count), id: \.self) {
        hand[$0].blatt
            .resizable()
            .scaledToFit() 
            .frame(height: scaledWidth)
            .border(.black)
    }
}

这给出了以下输出:

在此输入图像描述

这正是我所期望的。

另一个数组要垂直显示。为此,我使用以下代码:

VStack(spacing: 10) {
    ForEach((0 ..< hand.count), id: \.self) {
        hand[$0].blatt
            .resizable()
            .scaledToFit() 
            .rotationEffect(Angle(degrees: 90))
            .frame(width: scaledWidth, height: scaledWidth)
            .border(.black)
    }
}

这还给出了以下输出:

在此输入图像描述

这里,如边框所示,每个帧的高度是未旋转图像的高度。

aspectRatioBlatt由于我知道图像的长宽比,因此我可以使用 调整输出.frame(width: scaledWidth, height: scaledWidth / aspectRatioBlatt)。然后,框架具有正确的尺寸和正确的间距,但里面的图像太少了。同样,框架的高度等于内部未旋转图像的高度。

我尝试了很多视图修改器和多种组合,但都失败了。我什至尝试使用此处建议的垂直 Text自定义布局,但这也不起作用。
当然,我可以使用第二组旋转图像,但在 SwiftUI 中没有它应该是可能的。

怎样做才正确呢?

ios
  • 1 个回答
  • 38 Views
Martin Hope
Reinhard Männer
Asked: 2023-08-18 22:17:52 +0800 CST

不理解 SwiftUI 文本布局

  • 5

我想在视图的所有 4 个侧面输出一些文本。这是我的代码:

   var body: some View {
        Spacer()
        Text("AA BB CC DD EE FF GG HH")
        Spacer()
        HStack {
            Text("AA BB CC DD EE FF GG HH").rotationEffect(Angle(degrees: -90))
            Spacer()
            Text("AA BB CC DD EE FF GG HH").rotationEffect(Angle(degrees: 90))
        }.frame(height: 200)
        Spacer()
        Text("AA BB CC DD EE FF GG HH")
        Spacer()
    }
}

这是输出:
在此输入图像描述

问题:

  • 为什么文本左绕行,但相同的文本却没有右绕行?我怎样才能避免包裹?
  • 为什么文本左边距与右边文本不同?我怎样才能使它们平等?
swiftui
  • 2 个回答
  • 21 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve