Swift 的 pow() 函数不接受双精度数作为参数

2024-03-06

我创建了这个infix operator ^^作为使用的替代pow功能:

infix operator ^^ { associativity left precedence 155 }
func ^^ <T: IntegerLiteralConvertible>(left: T, right: T) -> T {
    return pow(left as Double, right as Double)
}

我用的是IntegerLiteralConvertible协议作为泛型的类型约束left and right,因为根据我的理解这个图 http://swiftdoc.org/protocol/IntegerLiteralConvertible/hierarchy/表明它基本上包括所有数字类型。

为了使用pow我必须沮丧的功能left and right to Double不过,我使用的是as操作员。这不是最安全的方法,但这不是重点。

实现功能时this way http://swiftstub.com/297613126/斯威夫特告诉我:

<stdin>:4:12: error: cannot invoke 'pow' with an argument list of type '(Double, Double)'
return pow(left as Double, right as Double)
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

现在据我所知pow需要两个Doubles 作为参数,那么为什么它会抱怨这一点呢?


为什么会抱怨这个?

因为战俘回归Double. And Double不等于T。该错误消息具有误导性,但它的意思是“找不到pow接受(Double, Double)并返回T type"


我认为你误解了 Swift 中的“cast”。在斯威夫特as不转换数字类型。

let intVal:Int = 12
let doubleVal:Double = intVal as Double
//                            ^ [!] error: 'Int' is not convertible to 'Double'

如果操作数的类型在编译时不可预测,则无效转换会导致运行时错误:

func foo<T: IntegerLiteralConvertible>(x: T)  {
    x as Double // <-- Execution was interrupted
}
foo(12 as Int)

相反,我们必须明确地“转换”它们。参见文档:数值类型转换 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID324

let intVal:Int = 12
let doubleVal:Double = Double(intVal)

这之所以有效只是因为Double has init(_ v: Int)初始化程序。以下代码无法编译:

func foo<T: IntegerLiteralConvertible>(x: T)  {
    Double(x)
//  ^~~~~~~~~ [!] error: cannot invoke 'init' with an argument of type 'T'
}

Because Double不具有init<T:IntegerLiteralConvertible>(_ val:T)初始化程序。

所以,如果你想使用pow(),你必须转换T to Double对于参数,并转换Double to T用于返回值。对此没有简单的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 的 pow() 函数不接受双精度数作为参数 的相关文章

  • 在 iOS 中,如何创建一个始终位于所有其他视图控制器之上的按钮?

    无论是否呈现模态或用户执行任何类型的转场 有没有办法让按钮在整个应用程序中 始终位于顶部 而不是屏幕顶部 有什么方法可以让这个按钮可拖动并可捕捉到屏幕上吗 我正在以苹果自己的辅助触摸作为此类按钮的示例 您可以通过创建自己的子类来做到这一点U
  • SwiftUI:发送电子邮件

    在正常情况下UIViewController在 Swift 中 我使用此代码发送邮件 let mailComposeViewController configuredMailComposeViewController mailCompose
  • Mockito.any() 通过泛型接口

    是否可以通过泛型传递接口的类型 界面 public interface AsyncCallback
  • Swift:设置协议的可选属性

    如何设置协议的可选属性 例如 UITextInputTraits 有许多可选的读 写属性 当我尝试以下操作时 出现编译错误 无法分配给 textInputTraits 中的 keyboardType func initializeTextI
  • 在 WKWebView 中禁用缩放?

    有谁知道在 WKWebView 中禁用双击和捏缩放的简单方法 我尝试过的任何方法都不起作用 Webview scrollView allowsMagnification false Error value of type WKWebView
  • 动态调度协议扩展不适用于多个目标

    这是我的主要目标中的代码 所以不是测试目标 protocol ProtocolA func dontCrash extension ProtocolA func dontCrash fatalError func tryCrash dont
  • NSPredicate IN 从数组元素查询

    对于一个古怪的标题表示歉意 我有一个 Int 数组 我想定义一个 NSPredicate 来过滤掉 connectionType 等于数组中包含的值的项目 所以基本上是这样的 fetchRequest predicate NSPredica
  • 在 Objective-C 中的 Swift 类上调用 NSStringFromClass 返回模块损坏的名称

    我知道这个问题 https stackoverflow com questions 24107658 get a user readable version of the class name in swift in objc nsstri
  • Fitbit oauth2 公共 API 停止工作。给出错误 - 抱歉,这不是你..是我们

    几个月前 我准备了一个关于 Fitbit oauth2 公共 API 的演示 其中我使用特定用户登录并获取他的活动 一切正常 但最近 我打开演示并尝试使用同一用户登录 但它没有登录并反复出现此错误 我尝试更改在 Fitbit 上注册的演示应
  • Swift:本地化字符串数组

    我有一个包含 100 多个字符串的数组 其设置如下所示 有什么方法可以本地化数组中的所有字符串 或者这是设置它的更好方法吗 var listOfThings Cars Mopeds 我建议将字符串放入 plist 文件中 然后可以根据需要本
  • 如何在 Objective C 中使用 swift 文件

    我想在 Objective C 代码中使用我的 Swift 文件 我找到了不同的链接 说明了如何操作 我的项目名称是 测试项目 我将 import Test Project Swift h 导入到我的 m 文件中 以在 Objective
  • 如何在不使用 ctrl-d 的情况下退出 swift repl?

    I want to quit swift repl gracefully and not use ctrl d to exit it 例如 python repl 可以通过输入退出exit 有类似的方法可以退出 swift repl 吗 这
  • 在 Swift 中, ! 是什么意思?函数签名中的符号是什么意思?

    在 Swift 函数签名中 什么是 争论后暗示 更具体地说 这是否意味着参数需要在传入之前解开 或者在传入时 自动 解开 这是一个示例 func annotationButtonTUI sender UIButton 在这种情况下 该函数是
  • Java泛型中类型参数的前向引用

    根据 Java 泛型常见问题解答http www angelikalanger com GenericsFAQ FAQSections TypeParameters html FAQ302 http www angelikalanger c
  • 如何在 RxSwift 中取消订阅 Observable?

    我想在 RxSwift 中取消订阅 Observable 为了做到这一点 我曾经将 Disposable 设置为 nil 但在我看来 更新到 RxSwift 3 0 0 beta 2 后 这个技巧不起作用 我无法取消订阅 Observabl
  • 如何通过 Google Sheets API 进行基本写作?

    在使用 Swift 学习 Google Sheets API 的过程中 我想将单个范围写入电子表格 调查iOS 快速入门指南 https developers google com sheets quickstart ios ver swi
  • 级联通用接口

    我正在构建自己的框架来包装通过暴露的接口Microsoft Office Interop 我将 Office 范围的功能包装到第一组接口中 然后由第二组功能继承 这些功能依赖于应用程序 这是一个简化版本 Region Office Wrap
  • 如何在 Swift 3 iOS 10 中创建自定义相册

    这听起来可能是重复的 但经过搜索 我仍然没有得到 Swift 3 的预期答案 当我尝试使用添加资产时为资产创建占位符后addAssets 方法 Xcode 建议我将 assetPlacehoder 转换为 FastEnumeration 类
  • Swift:配对数组元素的最佳方法是什么

    我遇到了一个需要成对迭代数组的问题 最好的方法是什么 或者 作为替代方案 将数组转换为对数组 然后可以正常迭代 的最佳方法是什么 这是我得到的最好的 这个需要output成为一个var 而且它并不是很漂亮 有没有更好的办法 let inpu
  • 如何使用 Unity 动态注册通用类?

    我有一个包含很多类 300 和 BaseClass 的程序集 我想用接口注册一个泛型类 统一后 您必须在 Name如果你想解析接口的对象数组 我想要一个对象数组主视图模型自动地 有没有办法通过反射来自动执行此操作 有什么建议么 示例 伪 p

随机推荐