সুইফ্টের গার্ড কীওয়ার্ড


197

সুইফট 2 guardকীওয়ার্ডটি প্রবর্তন করেছে , যা বিভিন্ন ডেটা যাওয়ার জন্য প্রস্তুত কনফিগার করা হয়েছে তা নিশ্চিত করতে ব্যবহার করা যেতে পারে। এই ওয়েবসাইটে আমি দেখেছি এমন একটি উদাহরণ একটি জমা-টেপযুক্ত কার্য সম্পাদন করে:

func submitTapped() {
    guard username.text.characters.count > 0 else {
        return
    }

    print("All good")
}

আমি ভাবছি যে guardকোনও ifশর্ত ব্যবহার করে পুরানো ফ্যাশন পদ্ধতিতে ব্যবহার করা কি আলাদা different এটি কি সুবিধাগুলি দেয় যা সাধারণ চেক ব্যবহার করে আপনি পান না?


আরো দেখুন পাহারা বনাম যদি-দিন প্রশ্ন
মধু

অনুগ্রহ করে নীচের লিঙ্কটি মিডিয়াম.com
প্রিয়াঙ্কা ভি

উত্তর:


368

পড়া এই নিবন্ধটি আমি ব্যবহার মহান সুবিধা খেয়াল গার্ড

এখানে আপনি গার্ডের ব্যবহারের উদাহরণের সাথে তুলনা করতে পারেন:

এটি গার্ড ছাড়া অংশ:

func fooBinding(x: Int?) {
    if let x = x where x > 0 {
        // Do stuff with x
        x.description
    }

    // Value requirements not met, do something
}
  1. এখানে আপনি সমস্ত শর্তের মধ্যে আপনার পছন্দসই কোডটি রাখছেন

    আপনি সম্ভবত এটির সাথে কোনও সমস্যা দেখতে পাবেন না, তবে আপনি কল্পনা করতে পারেন যে যদি আপনার বিবৃতি চালানোর আগে সমস্ত শর্ত পূরণ করার প্রয়োজন হয় এমন অনেক শর্তের দ্বারা বাসা বেঁধে দেওয়া হত তবে এটি কতটা বিভ্রান্তিকর হতে পারে imagine

এটি পরিষ্কার করার উপায়টি হ'ল প্রথমে আপনার প্রতিটি চেক করা এবং যদি পূরণ না হয় তবে প্রস্থান করুন। এটি শর্তগুলি কীভাবে এই ফাংশনটি প্রস্থান করবে তা সহজেই বোঝার অনুমতি দেয়।

তবে এখন আমরা প্রহরী ব্যবহার করতে পারি এবং আমরা দেখতে পাচ্ছি যে কিছু সমস্যা সমাধান করা সম্ভব:

func fooGuard(x: Int?) {
    guard let x = x where x > 0 else {
        // Value requirements not met, do something
        return
    }

    // Do stuff with x
    x.description
}
  1. আপনি যে শর্তটি চান তা যাচাই করা হচ্ছে, আপনি যা চান না তা নয়। এটি আবার একটি দৃsert়তার অনুরূপ। যদি শর্তটি পূরণ না করা হয়, তবে গার্ডের অন্য বিবৃতি চালানো হয়, যা ফাংশন থেকে বিচ্ছিন্ন হয়ে যায়।
  2. যদি শর্তটি পাস হয়ে যায়, তবে এখানে optionচ্ছিক চলক আপনার জন্য গার্ডের স্টেটমেন্টের যে স্কোপ বলা হয়েছিল সেগুলির মধ্যে স্বয়ংক্রিয়ভাবে মোড়ানো হবে - এই ক্ষেত্রে, fooGuard (_ :) ফাংশন।
  3. আপনি খুব দ্রুত খারাপ কেসগুলির জন্য যাচাই করছেন, আপনার ফাংশনটিকে আরও পঠনযোগ্য এবং বজায় রাখা সহজ করে তুলছেন

এই একই প্যাটার্নটি অ-alচ্ছিক মানগুলির জন্যও সত্য:

func fooNonOptionalGood(x: Int) {
    guard x > 0 else {
        // Value requirements not met, do something
        return
    }

    // Do stuff with x
}

func fooNonOptionalBad(x: Int) {
    if x <= 0 {
        // Value requirements not met, do something
        return
    }

    // Do stuff with x
}

আপনার যদি এখনও কোনও প্রশ্ন থাকে তবে আপনি পুরো নিবন্ধটি পড়তে পারেন: সুইফট গার্ডের বিবৃতি।

মোড়ক উম্মচন

এবং পরিশেষে, পড়া এবং পরীক্ষা করে আমি দেখতে পেয়েছি যে আপনি যদি কোনও বিকল্প অপসারণ করতে প্রহরী ব্যবহার করেন,

আপনার আবদ্ধ হওয়া কোডগুলি বাকী আপনার কোড ব্লকের জন্য ব্যবহারের জন্য আপনার চারপাশে থাকে

guard let unwrappedName = userName else {
    return
}

print("Your username is \(unwrappedName)")

এখানে মোড়কযুক্ত মানটি যদি কেবলমাত্র ব্লকের ভিতরে পাওয়া যায়

if let unwrappedName = userName {
    print("Your username is \(unwrappedName)")
} else {
    return
}

// this won't work – unwrappedName doesn't exist here!
print("Your username is \(unwrappedName)")

3
আরে @ এরিক আপনি একটি দুর্দান্ত পোস্ট করেছেন! এটি এত সহজে বোঝার জন্য আপনাকে ধন্যবাদ!
জর্জি ক্যাসেরিগো

1
আমি এনএসইরর মোড়কানোর জন্য প্রহরী ব্যবহার করছি। তবে আমি যখন এটি প্রহরী ক্ষেত্রের মধ্যে ব্যবহার করার চেষ্টা করি (উদাহরণস্বরূপ কিছু কলব্যাকের মধ্যে ত্রুটি পাস করার জন্য) এটি বলে যে "প্রহরী অবস্থায় ঘোষিত পরিবর্তনশীল তার দেহে ব্যবহারযোগ্য নয়"। এটা কোন অর্থ আছে? ধন্যবাদ
GeRyCh

6
@ জিরিসিএইচ কোনও প্রহরী বিবৃতিতে মোড়ক দেওয়া গার্ডের বিবৃতি দেওয়ার পরে এটি পরিবর্তনশীল উপলব্ধ করে , এর মধ্যে নয়। এটিতে অভ্যস্ত হতে আমাকে কিছুক্ষণ সময় নিয়েছে।
ডোনলিয়া

2
বিকল্পগুলি পরিষ্কারভাবে আন-মোড়ক করতে গার্ডটি ব্যবহারের জন্য এখানে আরও একটি দুর্দান্ত নিবন্ধ । এটি সুন্দরভাবে সংযুক্ত করে।
ডেস্ক

let x = x where x > 0এর অর্থ কি আপনি নিজের al চ্ছিক বাঁধাইয়ের সাথে আরও একটি শর্ত তৈরি করেছেন? আমি বোঝাতে চাইছি এটি থেকে কিছুটা আলাদাif let constantName = someOptional { statements }
হানি

36

বিপরীতে if, guardভেরিয়েবল তৈরি করে যা এর ব্লকের বাইরে থেকে অ্যাক্সেস করা যায়। এটি প্রচুর পরিমাণে আন-আপ করা দরকারী Optional


24

এর দুটি বড় সুবিধা রয়েছে guard। একজন আযাবের পিরামিডকে এড়িয়ে চলেছে, যেমন অন্যরা উল্লেখ করেছেন - প্রচুর বিরক্তিকর if letবক্তব্য একে অপরের অভ্যন্তরে আরও ডানদিকে সরানো থাকে and

অন্যান্য সুবিধাটি প্রায়শই যুক্তি যা আপনি প্রয়োগ করতে চান " if not let" এর চেয়ে " if let { } else" বেশি more

এখানে একটি উদাহরণ রয়েছে: ধরুন আপনি বাস্তবায়ন করতে চান accumulate- এর মধ্যে একটি ক্রস mapএবং reduceযেখানে এটি আপনাকে দৌড়ানোর অ্যারে ফিরিয়ে দেয়। এটি এখানে guard:

extension Sliceable where SubSlice.Generator.Element == Generator.Element {

    func accumulate(combine: (Generator.Element,Generator.Element)->Generator.Element) -> [Generator.Element] {
        // if there are no elements, I just want to bail out and
        // return an empty array
        guard var running = self.first else { return [] }

        // running will now be an unwrapped non-optional
        var result = [running]

        // dropFirst is safe because the collection
        // must have at least one element at this point
        for x in dropFirst(self) {
            running = combine(running, x)
            result.append(running)
        }
        return result
    }

}


let a = [1,2,3].accumulate(+)  // [1,3,6]
let b = [Int]().accumulate(+)  // []

আপনি প্রহরী ছাড়াই কীভাবে এটি লিখবেন , তবে এখনও এটি ব্যবহার firstকরে returnsচ্ছিক ফিরে আসে? এটার মতো কিছু:

extension Sliceable where SubSlice.Generator.Element == Generator.Element {

    func accumulate(combine: (Generator.Element,Generator.Element)->Generator.Element) -> [Generator.Element] {

        if var running = self.first  {
            var result = [running]

            for x in dropFirst(self) {
                running = combine(running, x)
                result.append(running)
            }
            return result
        }
        else {
            return []
        }
    }

}

অতিরিক্ত বাসা বেঁধে দেওয়া বিরক্তিকর, তবে এটি ifএবং elseএতদূর আলাদা হওয়াও যৌক্তিক নয় । খালি মামলার জন্য প্রারম্ভিক প্রস্থান করা আরও অনেক বেশি পঠনযোগ্য এবং তারপরে বাকী ক্রিয়াটি চালিয়ে যান যেন কোনও সম্ভাবনা নয়।


19

যখন কোনও শর্তটি ব্যবহার guardকরে পূরণ করা হয় তা guardব্লকের মধ্যে ঘোষিত ভেরিয়েবলগুলি বাকী কোড-ব্লকের কাছে প্রকাশ করে, এগুলি এটিকে তার পরিধিতে নিয়ে আসে। যা পূর্বেই বলা হয়েছে, অবশ্যই নীচে নেমে আসবেif let বিবৃতি ।

নোট করুন যে গার্ডের ফিরতে বা নিক্ষেপের প্রয়োজন তার অন্য বিবৃতিতে ।

গার্ডের সাথে জেএসএন পার্স করা হচ্ছে

নীচে যদি কোনও জেএসএন-এর পরিবর্তে গার্ড ব্যবহার করে জেএসএন-এর জিনিসটি পার্স করতে পারে তবে তার উদাহরণ দেওয়া যায় না-তবে। এটি একটি ব্লগ এন্ট্রি থেকে একটি অংশ যা একটি খেলার মাঠের ফাইল অন্তর্ভুক্ত যা আপনি এখানে খুঁজে পেতে পারেন:

জেএসএন পার্স করতে গার্ড ইন সুইফট 2 কীভাবে ব্যবহার করবেন

func parseJSONWithGuard(data : [String : AnyObject]) throws -> Developer {

    guard let firstname = data["First"] as? String  else {
        return Developer() // we could return a nil Developer()
    }

    guard let lastname = data["Last"] as? String else {
        throw ParseError.BadName // or we could throw a custom exception and handle the error
    }

    guard let website = data["WebSite"] as? String else {
        throw ParseError.BadName
    }

    guard let iosDev = data["iosDeveloper"] as? Bool else {
        throw ParseError.BadName
    }



    return Developer(first: firstname, last: lastname, site: website, ios: iosDev)

}

খেলার মাঠ ডাউনলোড করুন: গার্ড খেলার মাঠ

অধিক তথ্য:

সুইফ্ট প্রোগ্রামিং ভাষা নির্দেশিকার একটি অংশ এখানে দেওয়া হয়েছে :

যদি গার্ডের বিবৃতিটির শর্ত পূরণ হয়, গার্ড বিবৃতিটির বন্ধনী বন্ধনী পরে কোড কার্যকর করা অব্যাহত থাকে। শর্তের অংশ হিসাবে alচ্ছিক বাঁধাই ব্যবহার করে মানগুলি নির্ধারিত যে কোনও ভেরিয়েবল বা ধ্রুবকগুলি গার্ড স্টেটমেন্টের বাকি কোড ব্লকের জন্য উপলব্ধ।

যদি এই শর্তটি পূরণ না করা হয় তবে অন্য শাখার অভ্যন্তরে কোডটি কার্যকর করা হয়। সেই শাখাকে অবশ্যই সেই রক্ষণ বিবৃতিটি উপস্থিত হওয়া কোড ব্লকটি থেকে বেরিয়ে যাওয়ার জন্য নিয়ন্ত্রণটি স্থানান্তর করতে হবে return এটি একটি নিয়ন্ত্রণ স্থানান্তর বিবৃতি যেমন রিটার্ন, বিরতি, বা চালিয়ে যাওয়া, বা এটি ফাংশন বা পদ্ধতিতে কল করতে পারে যা ফিরে আসে না, যেমন হিসাবে মারাত্মকএরর ()।


7

একটি সুবিধা হ'ল অনেক নেস্টেড if letবিবৃতি বর্জন করা । সাড়ে ১৫ টার দিকে ডাব্লুডাব্লুডিসি "হোয়াট নিউ ইন সুইফট" ভিডিওটি দেখুন, "ডুমের পিরামিড" শিরোনামে বিভাগটি।


6

প্রহরী কখন ব্যবহার করবেন

যদি আপনি কয়েকটি ইউআইটিেক্সটফিল্ড উপাদান বা অন্য কোনও ধরণের ব্যবহারকারীর ইনপুট সহ একটি ভিউ কন্ট্রোলার পেয়ে থাকেন তবে আপনি অবিলম্বে লক্ষ্য করবেন যে আপনাকে অবশ্যই পাঠ্য ফিল্ড.টেক্সটটি আনপ্রেপ করতে হবে ভিতরে থাকা পাঠ্যের কাছে ifচ্ছিকভাবে (যদি থাকে!)। isEmpty এখানে আপনার কোনও ভাল করবে না, কোনও ইনপুট ছাড়াই পাঠ্য ক্ষেত্রটি কেবল শূন্য হয়ে যাবে।

সুতরাং আপনার এগুলির মধ্যে কয়েকটি রয়েছে যা আপনি আনপ্রেপ করেন এবং শেষ পর্যন্ত কোনও ফাংশনে পাস করেন যা তাদের সার্ভারের শেষ পয়েন্টে পোস্ট করে। আমরা চাই না যে সার্ভার কোডটি শূন্য মানের সাথে ডিল করতে হবে বা ভুল করে সার্ভারে অবৈধ মানগুলি প্রেরণ করা উচিত যাতে আমরা প্রথমে গার্ডের সাহায্যে এই ইনপুট মানগুলি আবরণ করব।

func submit() {
    guard let name = nameField.text else {
        show("No name to submit")
        return
    }

    guard let address = addressField.text else {
        show("No address to submit")
        return
    }

    guard let phone = phoneField.text else {
        show("No phone to submit")
        return
    }

    sendToServer(name, address: address, phone: phone)
}

func sendToServer(name: String, address: String, phone: String) {
  ...
}

আপনি দেখতে পাবেন যে আমাদের সার্ভার যোগাযোগের ক্রিয়াকলাপটি প্যারামিটার হিসাবে অ-alচ্ছিক স্ট্রিংয়ের মানগুলি গ্রহণ করে, অতএব রক্ষকটি আগেই মোড়ক ছাড়াই। আনার্যাপিংটি সামান্য অযৌক্তিক কারণ আমরা যদি কোনও ব্লকের অভ্যন্তরে ব্যবহারের জন্য মানগুলি আন-র্যাপ করে দেয় তবে এটি আন-র্যাপিংয়ের জন্য আমরা ব্যবহার করছি। এখানে গার্ড স্টেটমেন্টের সাথে সম্পর্কিত ব্লক রয়েছে তবে এটি আসলে অন্য একটি ব্লক - অর্থাত্ মোড়কটি ব্যর্থ হলে আপনি যা করেন - মানগুলি সরাসরি বিবৃতি হিসাবে একই প্রসঙ্গে straight

// উদ্বেগ বিচ্ছেদ

প্রহরী ছাড়াই

গার্ড ব্যবহার না করে, আমরা কোডের মতো একটি বৃহত কোডের সাথে শেষ করব a নিয়তি পিরামিড । আমাদের ফর্মটিতে নতুন ক্ষেত্র যুক্ত করার জন্য বা খুব পঠনযোগ্য কোডের জন্য এটি ভাল স্কেল করে না। ইন্ডেন্টেশন অনুসরণ করা কঠিন, বিশেষত প্রতিটি কাঁটাচামুতে আরও অনেক বিবৃতি দিয়ে।

func nonguardSubmit() {
    if let name = nameField.text {
        if let address = addressField.text {
            if let phone = phoneField.text {
                sendToServer(name, address: address, phone: phone)
            } else {
                show("no phone to submit")
            }
        } else {
            show("no address to submit")
        }
    } else {
        show("no name to submit")
    }
}

হ্যাঁ, আমরা এমনকি এই সমস্তগুলি একত্রিত করতে পারি যদি বিবৃতিগুলি একটি একক বিবৃতিতে কমা দিয়ে আলাদা করা হয় তবে আমরা কোন বিবৃতিটি ব্যর্থ হয়েছে তা সনাক্ত করার এবং ব্যবহারকারীর কাছে একটি বার্তা উপস্থাপনের দক্ষতাটি হ্রাস করব।

https://thatthinginswift.com/guard-statement-swift/


5

প্রহরী ব্যবহারের সাথে আমাদের নিবিড়তা স্পষ্ট। আমরা যদি এই বিশেষ শর্তটি সন্তুষ্ট না করি তবে আমরা বাকী কোডটি কার্যকর করতে চাই না। এখানে আমরা চেইন প্রসারিত করতে সক্ষম হয়েছি, নীচের কোডটি একবার দেখুন:

guard let value1 = number1, let value2 = number2 else { return }
 // do stuff here

5

গার্ড স্টেটমেন্ট করতে যাচ্ছে। এটি বিভিন্ন দম্পতি

1) এটি বিবৃতি যদি আমাকে নেস্টেড হ্রাস করতে দেয়
2) এটি আমার সুযোগ বাড়িয়ে তোলে যা আমার পরিবর্তনশীল অ্যাক্সেসযোগ্য

যদি বিবৃতি

func doTatal(num1 : Int?, num2: Int?) {
  // nested if statement
    if let fistNum = num1 where num1 > 0 {
        if let lastNum = num2 where num2 < 50 {

          let total = fistNum + lastNum
        }
    }
 // don't allow me to access out of the scope 
 //total = fistNum + lastNum 
}

গার্ড বিবৃতি

func doTatal(num1 : Int?, num2: Int?) {
   //reduce  nested if statement and check positive way not negative way 
    guard let fistNum = num1 where num1 > 0 else{
      return
    }
    guard  let lastNum = num2 where num2 < 50 else {
     return
    }
    // increase my scope which my variable accessible
    let total = fistNum + lastNum

}

3

অ্যাপল ডকুমেন্টেশন থেকে:

গার্ড বিবৃতি

যদি এক বা একাধিক শর্ত পূরণ না হয় তবে প্রোগ্রামের নিয়ন্ত্রণকে সুযোগের বাইরে স্থানান্তর করতে গার্ড স্টেটমেন্ট ব্যবহার করা হয়।

Synatx:

guard condition else {
    statements
}

সুবিধা:

1. guardবিবৃতি ব্যবহার করে আমরা গভীরভাবে নেস্টেড শর্তাদি থেকে মুক্তি পেতে পারি যার একমাত্র উদ্দেশ্য প্রয়োজনের একটি সেটকে বৈধতা দিচ্ছে।

২. এটি কোনও পদ্ধতি বা প্রারম্ভিক প্রথম দিকে প্রস্থান করার জন্য বিশেষভাবে ডিজাইন করা হয়েছিল।

যদি নীচে দেওয়া হয় তবে আপনি যদি ব্যবহার করেন তবে কোডটি এটির কেমন দেখাচ্ছে।

  let task = URLSession.shared.dataTask(with: request) { (data, response, error) in

        if error == nil {
            if let  statusCode = (response as? HTTPURLResponse)?.statusCode, statusCode >= 200 && statusCode <= 299 {
                if let data = data {

                    //Process Data Here.
                    print("Data: \(data)")

                } else {
                    print("No data was returned by the request!")
                }
            } else {
                print("Your request returned a status code other than 2XX!")
            }
        } else {
            print("Error Info: \(error.debugDescription)")
        }
    }
    task.resume()

গার্ড ব্যবহার করে আপনি এক বা একাধিক শর্ত পূরণ না হলে নিয়ন্ত্রণকে সুযোগের বাইরে স্থানান্তর করতে পারেন।

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in

            /* GUARD: was there an error? */
            guard (error == nil) else {
                print("There was an error with your request: \(error)")
                return
            }

            /* GUARD: Did we get a successful 2XX response? */
            guard let statusCode = (response as? HTTPURLResponse)?.statusCode, statusCode >= 200 && statusCode <= 299 else {
                print("Your request returned a status code other than 2XX!")
                return
            }

            /* GUARD: was there any data returned? */
            guard let data = data else {
                print("No data was returned by the request!")
                return
            }

            //Process Data Here.
            print("Data: \(data)")
}
task.resume()

রেফারেন্স:

1. সুইফট 2: প্রহরী সহ প্রারম্ভিক প্রস্থান 2. উদাসিটি 3. গার্ড বিবৃতি


তবে আপনি যদি বিবৃতি দিয়ে উত্তরোত্তর করতে পারেন? if condition { return }কর্কশকণ্ঠ?
অলিভার ডিকসন

2

যদি একটি বিবৃতি মত, গার্ড একটি এক্সপ্রেশন এর বুলিয়ান মান উপর ভিত্তি করে বিবৃতি কার্যকর। যদি একটি বিবৃতি থেকে ভিন্ন, গার্ড স্টেটমেন্ট কেবল শর্ত পূরণ না করা হয় তবে চলতে পারে। আপনি আরোহণের মতো আরও প্রহরী সম্পর্কে ভাবতে পারেন, তবে ক্র্যাশ হওয়ার পরিবর্তে আপনি মনোযোগ দিয়ে প্রস্থান করতে পারেন।

দেখুন: http://ericcerney.com/swift-guard-statement/


1

এটি সত্যিই বেশ কয়েকটি সংক্ষিপ্ত বিবরণ এবং বিকল্পগুলির সাথে একটি ক্রমের প্রবাহকে আরও সংক্ষিপ্ত এবং স্পষ্ট করে তোলে এবং নীড় বাঁধতে থাকলে প্রচুর হ্রাস করে। আইএফএস প্রতিস্থাপনের ক্ষেত্রে এরিকা সাদুন পোস্ট দেখুন । .... বহন করতে পারে, নীচের একটি উদাহরণ:

    let filteredLinks = locationsLinkedToList.filter({$0.actionVerb == movementCommand})
    guard let foundLink = filteredLinks.first else {return ("<Person> cannot go in that direction.", nil, nil)}
    guard filteredLinks.count == 1 else {return ("<Person> cannot decide which route to take.", nil, nil)}
    guard let nextLocation = foundLink.toLocation else {return ("<Person> cannot go in that direction.", nil, nil)}

দেখুন যে লাঠি আছে।


1

সোজা কথায়, এটি কার্যকর করার আগে ক্ষেত্রগুলিকে বৈধতা দেওয়ার একটি উপায় সরবরাহ করে। এটি পাঠযোগ্যতা বাড়ায় বলে এটি একটি ভাল প্রোগ্রামিং শৈলী। অন্যান্য ভাষায়, এটি দেখতে দেখতে এটির মতো হতে পারে:

func doSomething() {
    if something == nil {
        // return, break, throw error, etc.
    }
    ...
}

তবে যেহেতু সুইফ্ট আপনাকে বিকল্প সরবরাহ করে, আমরা এটি নিল কিনা তা পরীক্ষা করতে পারি না এবং এর মানটি একটি ভেরিয়েবলের জন্য বরাদ্দ করতে পারি। বিপরীতে, if letপরীক্ষা করে যে এটি শূন্য নয় এবং প্রকৃত মান ধরে রাখতে একটি পরিবর্তনশীল বরাদ্দ করে। এখানেই guardখেলতে আসে। এটি আপনাকে বিকল্পগুলি ব্যবহার করে তাড়াতাড়ি প্রস্থান করার আরও সংক্ষিপ্ত পথ দেয়।


1

সূত্র: গার্ড ইন সুইফ্ট

এটি স্পষ্টভাবে বুঝতে উদাহরণটি দেখুন

উদাহরণ 1:

func validate() {         
    guard 3>2 else {             
    print ("False")             
    return         
    }         
    print ("True") //True     
} 
validate()

উপরের উদাহরণে আমরা দেখতে পাই যে 3 টি 2 এর চেয়ে বড় এবং গার্ডের অন্য ক্লজের ভিতরে থাকা স্টেটমেন্টটি এড়িয়ে যায় এবং সত্য মুদ্রিত হয়।

উদাহরণ 2:

func validate() {         
    guard 1>2 else {             
    print ("False")            //False 
    return         
    }         
    print ("True")      
} 
validate()

উপরের উদাহরণে আমরা দেখতে পাই যে 1 2 এর চেয়ে ছোট এবং প্রহরীর অন্য ধরণের স্টেটমেন্ট কার্যকর করা হয় এবং প্রত্যাবর্তনের পরে ফলস মুদ্রিত হয়।

Example 3: gaurd let, unwrapping optionals through guard let

func getName(args myName: String?) {
     guard let name = myName, !name.isEmpty else {
     print ("Condition is false")          // Condition is false            return         
     }         
     print("Condition is met\(name)")     
} 
getName(args: "")

উপরের উদাহরণে আমরা বিকল্পগুলি আনারপ করতে গার্ড লেট ব্যবহার করছি। ফাংশনটি getName এ আমরা টাইপ স্ট্রিং মাইনেমের একটি পরিবর্তনশীল সংজ্ঞায়িত করেছি যা alচ্ছিক। তারপরে আমরা প্রহরীটি ব্যবহার করে চলক মাইনেমটি শূন্য কিনা তা যাচাই করতে, যদি নামটি বরাদ্দ না করে আবার পরীক্ষা করে দেখুন, নামটি খালি নেই। উভয় শর্ত যদি যোগ্যতা অর্জন করে তবে সত্যিকার অর্থে অন্য ব্লকটি এড়িয়ে যায় এবং "শর্তাবলী নামটি পূরণ করা হয়" মুদ্রণ করা হবে।

মূলত আমরা এখানে কমা দ্বারা পৃথক দুটি জিনিস পরীক্ষা করছি, প্রথম আনার্যাপিং এবং alচ্ছিক এবং এটি শর্তটি সন্তুষ্ট করে কিনা তা যাচাই করে নিচ্ছি।

এখানে আমরা ফাংশনটিতে কিছু দিচ্ছি না খালি স্ট্রিং এবং সুতরাং শর্তটি মিথ্যা প্রিন্ট হয়।

func getName(args myName: String?) {
     guard let name = myName, !name.isEmpty else {
     print ("Condition is false")          
     return         
     }        
     print("Condition is met \(name)") // Condition is met Hello    
} getName(args: "Hello")

এখানে আমরা ফাংশনটিতে "হ্যালো" দিয়ে যাচ্ছি এবং আপনি আউটপুট প্রিন্টেড দেখতে পাবেন "কন্ডিশনটি হ্যালো পূরণ হয়েছে"।

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