gpt4 book ai didi

function - 如何在函数中有效使用元组?

转载 作者:行者123 更新时间:2023-11-28 13:20:54 25 4
gpt4 key购买 nike

Swift 编程书说,

By returning a tuple with two distinct values, each of a different type, the function provides more useful information about its outcome than if it could only return a single value of a single type.

摘自:Apple Inc.“The Swift Programming Language”。电子书。 https://itun.es/gb/jEUH0.l

我在互联网上搜索但找不到任何例子。所以我自己尝试了下面的例子,但如果你做得更好,请告诉我。提前致谢。

var statusCode = 404
var statusMessage = "No Site"

let http404 = ( sCode : statusCode , sMessage : statusMessage)

func responseFromWS (foo : Int, bar : String) -> (param1 : Int, param2 : String)
{
statusCode = foo
statusMessage = bar

let httpProtocol = ( statusCode , statusMessage)

return httpProtocol
}


responseFromWS(500, "Internal Server Error")

Output

最佳答案

在其他语言(包括 objective-c )中,您只能返回一个值(任何类型),但在某些情况下,您可能需要返回多个值。

在这些情况下通常应用的模式是将对变量的引用传递给函数以获取所有其他返回值 - 典型的情况是对 NSError * 变量的引用,该函数要么将其设置为如果没有错误发生则为 nil,如果发生错误则为 NSError 的实例。

这样的问题在 swift 中使用打包在一个元组中的多个返回值优雅地解决了。

您使用此功能的方式似乎是正确的,但错误的是在函数范围之外定义 statusCodestatusMessage 变量:

func responseFromWS (foo : Int, bar : String) -> (code: Int, message: String)
{
let statusCode: Int = foo
let statusMessage: String = bar

return (code: statusCode, message: statusMessage)

// Note: you can also write as follows, because the parameter names are defined in the function signature
// return (statusCode, statusMessage)
}

您可以通过不同的方式使用返回值。作为一个元组:

let response = responseFromWS(500, "Internal Server Error")

// Using named parameters
println(response.code) // Prints 500
println(response.message) // Prints "Internal Server Error"

// using parameters by index
println(response.0) // Prints 500
println(response.1) // Prints "Internal Server Error"

作为单个变量:

let (code, message) = responseFromWS(500, "Internal Server Error")

println(code)
println(message)

作为单个变量的子集(如果您只需要返回值的子集):

// Assign message only, discard code
let (_, message) = responseFromWS(500, "Internal Server Error")

println(message)

关于function - 如何在函数中有效使用元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25861959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com