web-dev-qa-db-fra.com

Renvoie plusieurs valeurs d'une fonction dans swift

Comment renvoyer 3 valeurs de données distinctes du même type (Int) à partir d'une fonction dans swift?

J'essaie de renvoyer l'heure du jour, je dois renvoyer l'heure, la minute et la seconde sous forme de nombres entiers séparés, mais tout d'un coup à partir de la même fonction, est-ce possible?

Je pense que je ne comprends tout simplement pas la syntaxe pour renvoyer plusieurs valeurs. C'est le code que j'utilise, j'ai des problèmes avec la dernière ligne (de retour).

Toute aide serait grandement appréciée!

func getTime() -> Int
{
    let date = NSDate()
    let calendar = NSCalendar.currentCalendar()
    let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond, fromDate: date)
    let hour = components.hour
    let minute = components.minute
    let second = components.second
    let times:String = ("\(hour):\(minute):\(second)")
    return hour, minute, second
}
110
OllieGreen

Retourner un tuple:

func getTime() -> (Int, Int, Int) {
    ...
    return ( hour, minute, second)
}

Ensuite, il est appelé comme:

let (hour, minute, second) = getTime()

ou:

let time = getTime()
println("hour: \(time.0)")
236
David Berry

Également:

func getTime() -> (hour: Int, minute: Int,second: Int) {
    let hour = 1
    let minute = 2
    let second = 3
    return ( hour, minute, second)
}

Ensuite, il est appelé comme:

let time = getTime()
print("hour: \(time.hour), minute: \(time.minute), second: \(time.second)")

C’est la manière habituelle de l’utiliser dans le livre The Swift Programming Language écrit par Apple.

ou juste comme:

let time = getTime()
print("hour: \(time.0), minute: \(time.1), second: \(time.2)")

c'est pareil mais moins clair.

61
jtianling

vous devriez renvoyer trois valeurs différentes à partir de cette méthode et les obtenir dans une seule variable comme celle-ci.

func getTime()-> (hour:Int,min:Int,sec:Int){
//your code
return (hour,min,sec)
}

obtenir la valeur en variable unique

let getTime = getTime()

maintenant, vous pouvez accéder aux heures, minutes et secondes simplement par "." c'est à dire.

print("hour:\(getTime.hour) min:\(getTime.min) sec:\(getTime.sec)")
10
nabu

Swift 3

func getTime() -> (hour: Int, minute: Int,second: Int) {
        let hour = 1
        let minute = 20
        let second = 55
        return (hour, minute, second)
    }

Utiliser :

let(hour, min,sec) = self.getTime()
print(hour,min,sec)
5
Hardik Thakkar

Mise à jour Swift 4.1

Ici, nous créons une structure pour implémenter l'utilisation de Tuple et valider la longueur de texte OTP. Cela doit être de 2 champs pour cet exemple. 

struct ValidateOTP {
var code: String
var isValid: Bool }

func validateTheOTP() -> ValidateOTP {
    let otpCode = String(format: "%@%@", txtOtpField1.text!, txtOtpField2.text!)
    if otpCode.length < 2 {
        return ValidateOTP(code: otpCode, isValid: false)
    } else {
        return ValidateOTP(code: otpCode, isValid: true)
    }
}

Usage:

let isValidOTP = validateTheOTP()
    if isValidOTP.isValid { print(" valid OTP") } else {   self.alert(msg: "Please fill the valid OTP", buttons: ["Ok"], handler: nil)
    }

J'espère que ça aide!

Merci

2
Harjot Singh
//By : Dhaval Nimavat
    import UIKit

   func weather_diff(country1:String,temp1:Double,country2:String,temp2:Double)->(c1:String,c2:String,diff:Double)
   {
    let c1 = country1
    let c2 = country2
    let diff = temp1 - temp2
    return(c1,c2,diff)
   }

   let result = 
   weather_diff(country1: "India", temp1: 45.5, country2: "Canada", temp2:    18.5)
   print("Weather difference between \(result.c1) and \(result.c2) is \(result.diff)")
0
Dhaval Nimavat