游乐场中的以下代码按预期工作。
let abc = 5.0
let def = 10.0
let tuple = (a: abc, d: def)
println(" tuple Parts .0 = \(tuple.0) .1 = \(tuple.1) ")
println(" tuple Parts .a = \(tuple.a) .d = \(tuple.d) ")
println(" tuple Whole = \(tuple)")
Playground console output:
tuple Parts .0 = 5.0 .1 = 10.0
tuple Parts .a = 5.0 .d = 10.0
tuple Whole = (5.0, 10.0)
当代码放在swift类的函数中,并且构建/运行完成时,控制台会显示:
tuple Parts .0 = 5.0 .1 = 10.0
tuple Parts .a = 5.0 .d = 10.0
tuple Whole = (1.28601959704862e-313, 1.28601959783912e-313)
整体显示几乎为零的数字。运行Beta 2.
我在俯瞰什么? 同样奇怪的是,将println行放在一个循环中会为每次重复整个行打印略微不同的e-313值。
更多对于那些请求其余代码的人来说,没有多少。
简约,快速,肮脏,完整的代码示例"是创建一个新项目,一个iOS应用程序,选择单一视图应用程序。选择了Swift语言。
将一个tryTuple函数添加到View Controller并在viewDidLoad中调用该函数。
ViewController.swift看起来像:
import UIKit
class ViewController: UIViewController {
func tryTuple (marker:String) {
println("---- \(marker)")
let abc = 5.0
let def = 10.0
let tuple = (a: abc, d: def)
println(" tuple Parts .0 = \(tuple.0) .1 = \(tuple.1) ")
println(" tuple Parts .a = \(tuple.a) .d = \(tuple.d) ")
println(" tuple Whole = \(tuple)")
}
override func viewDidLoad() {
super.viewDidLoad()
tryTuple("TryTuple1")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
运行此操作(在XCODE中按下构建和运行光标,碰巧使用iPhone 4s iOS模拟器)会生成此控制台输出。
---- TryTuple1
tuple Parts .0 = 5.0 .1 = 10.0
tuple Parts .a = 5.0 .d = 10.0
tuple Whole = (1.28543029649464e-313, 1.28543029728515e-313)
所以仍然不是我所期待的。
答案 0 :(得分:1)
对我来说看起来像个错误。你不需要把它放到一个单独的功能中;只是把这个:
let foo = (5.0, 10.0)
println("foo: \(foo)")
...到iOS项目中的viewDidLoad将在32位模拟器上运行时重现问题,据我所知。这可以解释为什么你不能在操场上重现它:我猜你的游乐场将是64位。如果我在4S模拟器上运行上面的代码,它会打印零,如果我在5S模拟器中运行它,它会打印出预期的值。
如果我是你,我会file a bug。