দ্রুত একটি ফাংশন থেকে একাধিক মান ফিরে আসুন


148

আমি কীভাবে একই ধরণের (ইন্ট) 3 টি পৃথক ডেটা মান দ্রুতগতিতে ফিরিয়ে দেব?

আমি দিনের সময়টি ফেরত দেওয়ার চেষ্টা করছি, আমাকে আওয়ার, মিনিট এবং সেকেন্ডকে পৃথক পূর্ণসংখ্যার হিসাবে ফিরিয়ে আনতে হবে, তবে সবগুলিই একই ফাংশন থেকে যায়, এটি কি সম্ভব?

আমি মনে করি আমি একাধিক মান ফেরত দেওয়ার জন্য বাক্য গঠনটি বুঝতে পারি না। এই কোডটি আমি ব্যবহার করছি, আমি শেষ (রিটার্ন) লাইন নিয়ে সমস্যায় পড়ছি।

কোন সাহায্যের ব্যাপকভাবে প্রশংসা হবে!

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
}

1
NSArray (অবজেক্টস: ঘন্টা, মিনিট, সেকেন্ড) ফিরিয়ে দিন
আমরো শফি

4
"সুইফ্ট প্রোগ্রামিং ল্যাঙ্গুয়েজ" আইবুকের আসলে "একাধিক রিটার্ন মান সহ ফাংশন" শিরোনামে একটি বিভাগ রয়েছে ...
মার্টিন আর

উত্তর:


311

একটি টিপল ফিরে:

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

তারপরে এটি আহবান করা হয়েছে:

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

বা:

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

25
নোট করুন যে একটি ভাল সমাধান সময় কাঠামো সংজ্ঞায়িত করা এবং টিপলের পরিবর্তে এটি ব্যবহার করা হতে পারে।
ডেভিড বেরি

1
কোনও উদ্দেশ্য সি পদ্ধতি থেকে আপনি কীভাবে এই সুইফ্ট ফানকে ডাকবেন? আপনি তিনটি ফেরত মানগুলিতে কীভাবে হ্যান্ডেল অর্জন করবেন তা আগ্রহী। উদাহরণস্বরূপ, আপনি কি একটি অভিধান ব্যবহার করবেন?
ফিল

1
আপনি না। আপনি যদি এটিজজেক থেকে কল করতে চান তবে আপনাকে নিশ্চিত কোনও ক্লাস (সম্ভবত কোনও স্ট্রাক্ট) ফিরিয়ে দিতে হবে।
ডেভিড বেরি

5
প্যারামিটারগুলিতে নাম যুক্ত করার পরামর্শ দেওয়া হয়েছে: ফানক গেটটাইম () -> (ঘন্টা: ইন্ট, মিনিট: ইনট, সেকেন্ড: ইনট) এর পরে গেটটাইম () এর মতো ঘন্টা পান
ব্রুনো লেমোস

ব্রুনো লেমোস এহ, আমি এখনও একটি ভাল কাঠামো নির্ধারণ এবং এটি ব্যবহার করার জন্য আরও ভাল সমাধানের সাথে যেতে চাই।
ডেভিড বেরি

75

এছাড়াও:

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

তারপরে এটি আহবান করা হয়েছে:

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

এটি অ্যাপল দ্বারা রচিত দ্য সুইফ্ট প্রোগ্রামিং ভাষা বইতে এটি কীভাবে ব্যবহার করা যায়।

বা ঠিক যেমন:

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

এটি একই তবে কম স্পষ্ট।


1
the right answer can't compile right in swift 2.0: ভুল, সুইফট 2-এ একটি নামবিহীন টুপল ফিরিয়ে নেওয়া সুইফট ১ এর মতোই কাজ করে this এই স্ক্রিনশটটি দেখুন ।
এরিক আয়া

হ্যাঁ, আপনি ঠিক বলেছেন, তবে আমি একটি অনুরূপ প্রসঙ্গে একটি সংকলন ত্রুটি পেয়েছি। আমার এটি খুঁজে পাওয়া উচিত কেন।
জেস্টলিং

কম্পাইল এরর এর সাথে সম্পর্কিত করা হয় নি, এটা CalendarUnit বিন্যাসের কারণ ছিল সুইফট 2 পরিবর্তিত হচ্ছে, না tuple বিন্যাস।
এরিক আয়া

এর মতো নয়, আমি যে সংকলন ত্রুটির কথা বলেছিলাম সেটি কোডটিতে উপস্থিত হয়েছিল।
jtianling

time.hourআর কাজ করবে না। কোড আপডেট করুন।
লাল কৃষ্ণ

12

আপনার এই পদ্ধতি থেকে তিনটি পৃথক মান ফিরে পাওয়া উচিত এবং এই তিনটি এই জাতীয় একটি ভেরিয়েবলের মধ্যে পাওয়া উচিত।

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

একক ভেরিয়েবলের মান পান

let getTime = getTime()

এখন আপনি কেবল "দ্বারা" ঘন্টা, মিনিট এবং সেকেন্ড অ্যাক্সেস করতে পারবেন। অর্থাত।

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

7

সুইফট 3

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

ব্যবহার করা :

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

6

সুইফট আপডেট করুন 4.1

এখানে আমরা টিপল ব্যবহারটি কার্যকর করতে ওটিপি পাঠ্যের দৈর্ঘ্যকে বৈধ করার জন্য একটি কাঠামো তৈরি করি। এই উদাহরণের জন্য এটি 2 টি ক্ষেত্রের হওয়া দরকার।

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)
    }
}

ব্যবহার:

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

আশা করি এটা সাহায্য করবে!

ধন্যবাদ


1
আরও ভাল বোঝার জন্য: माध्यम.com
@

1
//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)")

আউটপুট: ভারত এবং কানাডার মধ্যে আবহাওয়ার পার্থক্য 27.0
ধাওয়াল নিমাত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.