swift元组有意想不到的打印结果

时间:2014-06-22 21:52:23

标签: swift

游乐场中的以下代码按预期工作。

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)

所以仍然不是我所期待的。

1 个答案:

答案 0 :(得分:1)

对我来说看起来像个错误。你不需要把它放到一个单独的功能中;只是把这个:

    let foo = (5.0, 10.0)
    println("foo: \(foo)")

...到iOS项目中的viewDidLoad将在32位模拟器上运行时重现问题,据我所知。这可以解释为什么你不能在操场上重现它:我猜你的游乐场将是64位。如果我在4S模拟器上运行上面的代码,它会打印零,如果我在5S模拟器中运行它,它会打印出预期的值。

如果我是你,我会file a bug