我正在阅读这个问题的答案 - Swift native functions to have numbers as hex string - 而这正是我想要做的。但是,当我在操场上试试这个时:
let str = String(num: 123.55, radix: 16);
print(str)
打印出来:
(123.55, 16)
为什么要这样格式化?
如果我使用整数,即E.G.,123,同样的事情也会发生。
答案 0 :(得分:1)
我更仔细地阅读了对话,这是“数字”。破坏它的标签。如果我使用String(123,radix:16)它可以正常工作。但是,分数不起作用。我在String(123.55,基数:16)中遇到了运行时错误。
编辑:正如nhgrif指出的那样,现在这是一个编译器错误,而不是运行时错误 - 所以它应该从未被允许过。从XCode版本7.1.1(7B1005)开始就是如此。我相信正在发生的是在第一个参数上创建一个元组的num:label,然后调用String初始化器,它将元组转换为它的字符串表示。我个人原本希望看起来像这样: let str = String((num: 1, radix: 2));
编译器以相同的方式处理(相同的结果输出)。
答案 1 :(得分:0)
您的问题是,在这种情况下,Swift编译器或init
类型的String
没有实现从Double
,Float
转换为基本转换函数另一个基础,你可以按照这个问题[{3}}中解释的一些方法加上How to convert float number to Binary?并为你自己做。
调用init
的方式如下:
let num = 12355
let str = String(num, radix: 16)
print(str) // prints "3043"
我希望这对你有所帮助。
答案 2 :(得分:0)
您的代码甚至编译(或由Playground解释)是编译器错误。它也可能表示您没有使用最新版本的Xcode,或者您需要清理和放弃Xcode。重建。
您尝试使用的初始值设定项仅针对整数类型定义。
extension String { /// Create an instance representing `v` in base 10. public init<T : _SignedIntegerType>(_ v: T) /// Create an instance representing `v` in base 10. public init<T : UnsignedIntegerType>(_ v: T) /// Create an instance representing `v` in the given `radix` (base). /// /// Numerals greater than 9 are represented as roman letters, /// starting with `a` if `uppercase` is `false` or `A` otherwise. public init<T : _SignedIntegerType>(_ v: T, radix: Int, uppercase: Bool = default) /// Create an instance representing `v` in the given `radix` (base). /// /// Numerals greater than 9 are represented as roman letters, /// starting with `a` if `uppercase` is `false` or `A` otherwise. public init<T : UnsignedIntegerType>(_ v: T, radix: Int, uppercase: Bool = default) }
在我的Xcode上,在Playground中,尝试将此初始值设定项与不是_SignedIntegerType
或UnsignedIntegerType
的内容一起使用会产生错误。
无法为类型&#39;字符串&#39;调用初始值设定项使用类型&#39;(Double,radix:Int)&#39;
的参数列表