শর্তাধীন বাঁধাই: যদি ত্রুটি হয় - শর্তাধীন বাঁধার জন্য প্রারম্ভিকর অবশ্যই চ্ছিক প্রকারের থাকতে হবে


120

আমি আমার ডেটা উত্স এবং নিম্নলিখিত কোডের লাইনটি থেকে একটি সারি মুছে ফেলার চেষ্টা করছি:

if let tv = tableView {

নিম্নলিখিত ত্রুটির কারণ:

শর্তাধীন বন্ধনের জন্য ইনিশিয়ালাইজারের অবশ্যই ইউটিআইটিবেল নয়, ptionচ্ছিক প্রকার থাকতে হবে

এখানে পুরো কোডটি রয়েছে:

// Override to support editing the table view.
func tableView(tableView: UITableView, commitEditingStyle editingStyle:UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {

        // Delete the row from the data source

    if let tv = tableView {

            myData.removeAtIndex(indexPath.row)

            tv.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

আমি কীভাবে নিম্নলিখিতগুলি সংশোধন করব?

 if let tv = tableView {

8
যেহেতু tableViewalচ্ছিক মান নয়, এটি নিল কিনা তা পরীক্ষা করার দরকার নেই। সুতরাং আপনি এটি সরাসরি ব্যবহার করতে পারেন, আমার অর্থ এটি সরান if let এবং কেবল tableViewফাংশনে ব্যবহার করুন
এরিক কিয়ান

উত্তরসূরির জন্য, আমি এই সমস্যাটি সমাধান করার পরে, আমি দৌড়ে এসেছি variable with getter/setter cannot have an initial value, যা সূচনার
জ্যাক টি।

উত্তর:


216

if let/ if varalচ্ছিক বাঁধাই কেবল তখনই কাজ করে যখন অভিব্যক্তির ডান পাশের ফলাফলটি alচ্ছিক হয়। ডান পাশের ফলাফলটি যদি alচ্ছিক না হয় তবে আপনি এই alচ্ছিক বাঁধাই ব্যবহার করতে পারবেন না। এই alচ্ছিক বাঁধাইয়ের বিষয়টি হ'ল nilভেরিয়েবলটি অ-ব্যবহার করে পরীক্ষা করা এবং ব্যবহার করা nil

আপনার ক্ষেত্রে, tableViewপরামিতিটি অ-alচ্ছিক প্রকার হিসাবে ঘোষণা করা হয়েছে UITableView। এটি কখনই না হওয়ার গ্যারান্টিযুক্ত nil। সুতরাং এখানে alচ্ছিক বাঁধাই অপ্রয়োজনীয়।

func tableView(tableView: UITableView, commitEditingStyle editingStyle:UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
        // Delete the row from the data source
        myData.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

আমাদের যা করতে হবে তা হল এর থেকে মুক্তি পাওয়া if letএবং এর tvমধ্যে যে কোনও ঘটনাকে ন্যায্যতে পরিবর্তন করা tableView


17

আমার নির্দিষ্ট সমস্যার জন্য আমাকে প্রতিস্থাপন করতে হয়েছিল

if let count = 1
    {
        // do something ...
    }

সঙ্গে

let count = 1
if(count > 0)
    {
        // do something ...
    }

2
এই লোকটির সেরা উত্তর মন্তব্যগুলি দেখুন stackoverflow.com/a/31039427/2797944
শৌকেত শেখ

16

আপনি কাস্টম সেল প্রকারটি ব্যবহার করছেন এমন ক্ষেত্রে, আর্টিকেল বলুন, আপনি সম্ভবত একটি ত্রুটি পেয়ে যাবেন:

    Initializer for conditional binding must have Optional type, not 'ArticleCell'

আপনার কোডের লাইনটি এমন কিছু দেখায় আপনি এই ত্রুটিটি পাবেন:

    if let cell = tableView.dequeReusableCell(withIdentifier: "ArticleCell",for indexPath: indexPath) as! ArticleCell 

আপনি নিম্নলিখিতটি করে এই ত্রুটিটি সমাধান করতে পারেন:

    if let cell = tableView.dequeReusableCell(withIdentifier: "ArticleCell",for indexPath: indexPath) as ArticleCell?

আপনি যদি উপরেরটি পরীক্ষা করে দেখেন তবে দেখতে পাবেন যে পরবর্তীকালে আর্টিকেলসেল টাইপের একটি কক্ষের জন্য alচ্ছিক castালাই ব্যবহার করা হচ্ছে।


আমার ক্ষেত্রে আমার ব্যবহার করা দরকারas! ArticleCell?
লিলবিস্কুট

9

প্রহরীদের বিবৃতিতে একই প্রযোজ্য । একই ত্রুটি বার্তাটি আমাকে এই পোস্টে এবং উত্তর দেয় (ধন্যবাদ @ এনজিগ্রিফ)।

কোড: মাঝের নামটি যদি চারটি অক্ষরের চেয়ে কম হয় তবেই ব্যক্তির শেষ নামটি মুদ্রণ করুন।

func greetByMiddleName(name: (first: String, middle: String?, last: String?)) {
    guard let Name = name.last where name.middle?.characters.count < 4 else {
        print("Hi there)")
        return
    }
    print("Hey \(Name)!")
}

Last চ্ছিক প্যারামিটার হিসাবে আমি শেষ ঘোষণা না করা পর্যন্ত আমি একই ত্রুটিটি দেখছিলাম।


4

কন্ডিশন বাইন্ডিংয়ের অবশ্যই অপটিনাল টাইপ থাকতে হবে যার অর্থ আপনি যদি কেবলমাত্র বিবৃতিতে বৈকল্পিক মানগুলিকে আবদ্ধ করতে পারেন

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

    if editingStyle == .delete {

        // Delete the row from the data source

        if let tv = tableView as UITableView? {


        }
    }
}

এটি সূক্ষ্মভাবে কাজ করবে তবে আপনি যখন এটি ব্যবহার করবেন এটি অবশ্যই অপ্টিনাল টাইপ "" রাখবেন তা নিশ্চিত করুন? "


0

ঠিক আছে, যদি আমরা যদি এর শর্তের মধ্যে স্বাভাবিক মানগুলি ঘোষণা করতে পারি তবে এটি এখনও সুবিধাজনক হবে (সিনট্যাক্টিক্যালি)। সুতরাং, এখানে একটি কৌশল: আপনি কম্পাইলারটিকে ভাবতে Optional.some(T)পারেন যে এর মতো কোনও মূল্য নির্ধারিত রয়েছে :

    if let i = "abc".firstIndex(of: "a"),
        let i_int = .some(i.utf16Offset(in: "abc")),
        i_int < 1 {
        // Code
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.