ক্লাসের কোনও প্রারম্ভিক সুইফট নেই


181

আমার সুইফ্ট ক্লাসে সমস্যা আছে। আমার কাছে ইউআইটিএবল ভিউকন্ট্রোলার ক্লাস এবং ইউআইটিএবলভিউসেল ক্লাসের জন্য একটি সুইফ্ট ফাইল রয়েছে। আমার সমস্যা হ'ল ইউআইটিএবল ভিউসেল ক্লাস এবং আউটলেটগুলি। এই শ্রেণীর একটি ত্রুটি রয়েছে ক্লাস "হোমসেল" এর কোনও আরম্ভকারী নেই এবং আমি এই সমস্যাটি বুঝতে পারি না।

আপনার প্রতিক্রিয়া জন্য ধন্যবাদ।

import Foundation
import UIKit

class HomeTable: UITableViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet var tableViex: UITableView!

    var items: [(String, String, String)] = [
        ("Test", "123", "1.jpeg"),
        ("Test2", "236", "2.jpeg"),
        ("Test3", "678", "3.jpeg")
    ]

    override func viewDidLoad() {
        super.viewDidLoad()

        var nib = UINib(nibName: "HomeCell", bundle: nil)
        tableView.registerNib(nib, forCellReuseIdentifier: "bookCell")
    }

    // Number row
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.items.count
    }

    // Style Cell
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("bookCell") as UITableViewCell

        // Style here

        return cell

    }

    // Select row
    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        // Select
    }

}

// PROBLEM HERE
class HomeCell : UITableViewCell {

    @IBOutlet var imgBook: UIImageView
    @IBOutlet var titleBook: UILabel
    @IBOutlet var pageBook: UILabel

    func loadItem(#title: String, page: String, image:String) {
        titleBook.text = title
        pageBook.text = page
        imgBook.image = UIImage(named: image)
    }

}

Youচ্ছিক ইউআইএনআইবি হিসাবে আপনার কি স্পষ্টভাবে নিব ভেরিয়েবলের প্রকারটি বর্ণনা করতে হবে?
কোকোডেলিকা

উত্তর:


257

আপনাকে সূক্ষ্মভাবে মোড়কযুক্ত বিকল্পগুলি ব্যবহার করতে হবে যাতে সুইফট আরম্ভের পর্যায়ে বিজ্ঞপ্তি নির্ভরতা (এই ক্ষেত্রে UI উপাদানগুলির পিতা-মাতা <-> সন্তানের) সাথে লড়াই করতে পারে।

@IBOutlet var imgBook: UIImageView!
@IBOutlet var titleBook: UILabel!
@IBOutlet var pageBook: UILabel!

এই ডকটি পড়ুন , তারা এগুলি সমস্ত সুন্দরভাবে ব্যাখ্যা করেছেন।


21
আপনার ব্যাখ্যা, এবং সেই দস্তাবেজটি সমস্তই আমার কাছে বোঝায় তবে ত্রুটির বার্তাটি নয়!
কোকো

4
এটি সম্ভবত অ্যাপলের জন্য একটি প্রশ্ন
এমপ্রিভ্যাট

এছাড়াও @ আইবিআউটলেটগুলি বজায় রাখার চক্র এড়াতে দুর্বল হিসাবে চিহ্নিত করা উচিত।
ডেনিস পশকভ

@ ডেনিস পশকভ যতদূর আমি জানি, এটি কেবলমাত্র আইবিউটলেটগুলির জন্য যা কনট্রোলারের দর্শন শ্রেণিবদ্ধ in অন্যথায় এটি অবিলম্বে মুক্তি পাবে কারণ কেউ এটি ধরে না।
অ্যালস্টন

3
আমার এই সমস্যাটি হয়েছিল যেখানে আমি একটি বুল ব্যবহার করে সংজ্ঞায়িত করেছি var myBool: Bool
জংলেদেব

96

দ্রুত ঠিক করা - নিশ্চিত করুন যে ভেরিয়েবল যা যখন তারা (যেমন তৈরি করা হয় সক্রিয়া পেতে না var num : Int?বনাম var num = 5) থাকতে হয় একটি ?বা !

দীর্ঘ উত্তর ( পুনরুদ্ধার ) - এমপ্রিভের পরামর্শ অনুসারে ডকটি পড়ুন ...


এই ত্রুটিটি সমাধান করার জন্য আপনাকে ডিফল্ট মান সেট আপ করতে হবে? ভেরিয়েবল, উদাহরণস্বরূপ: শো ব্যবহারকারী ব্যবহারকারী পয়েন্টভিউ প্রদর্শনী: শো ইউজারপয়েন্টসভিউকন্ট্রোলারকন্ট্রোল? = শূন্য
ভ্লাদিমির ভোডোলাজকি

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

জন্য অনুসন্ধান করুন varএবং letআপনি নিয়ামক দৃশ্যে, ফর মিসিং অ্যান্ড বর্ণন !s এবং ?গুলি
Wiingaard

33

এটি অ্যাপল ডক থেকে এসেছে

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

আপনি ত্রুটি বার্তাটি পান ক্লাস "হোমসেল" এর কোনও আরম্ভকারী নেই কারণ আপনার ভেরিয়েবলগুলি অনির্দিষ্ট অবস্থায় রয়েছে। হয় আপনি আরম্ভকারী তৈরি করেন বা আপনি তাদের ব্যবহার করে alচ্ছিক প্রকারগুলি তৈরি করে! বা?


32

আমার উত্তরটি সাধারণভাবে ত্রুটিটিকে চিহ্নিত করে এবং ওপি-র সঠিক কোডটি নয়। কোনও উত্তর এই নোটটি উল্লেখ করেছে তাই আমি কেবল ভেবেছিলাম এটি যুক্ত করব।

নীচের কোডটিও একই ত্রুটি তৈরি করবে :

class Actor {
    let agent : String? // BAD! // Its value is set to nil, and will always be nil and that's stupid so Xcode is saying not-accepted.  
    // Technically speaking you have a way around it🤓, you can help the compiler and enforce your value as a constant. See Option3
}

অন্যরা উল্লেখ করেছেন যে হয় আপনি আরম্ভকারী তৈরি করেন বা আপনি তাদের ব্যবহার করে optionচ্ছিক প্রকার তৈরি করেন! বা? যা সঠিক. তবে আপনার যদি কোনও alচ্ছিক সদস্য / সম্পত্তি থাকে তবে thatচ্ছিকটি পরিবর্তনযোগ্য অর্থাৎ হওয়া উচিত var। আপনি যদি এটি তৈরি করেন letতবে এটি কখনই তার nilরাজ্য থেকে বেরিয়ে আসতে সক্ষম হবে না । এটা খারাপ!

সুতরাং এটি লেখার সঠিক উপায়:

বিকল্প 1

class Actor {
    var agent : String? // It's defaulted to `nil`, but also has a chance so it later can be set to something different || GOOD!
}

অথবা আপনি এটি লিখতে পারেন:

OPTION2

class Actor {
let agent : String? // It's value isn't set to nil, but has an initializer || GOOD!

init (agent: String?){
    self.agent = agent // it has a chance so its value can be set!
    }
}

বা এটি কোনও মানকে ডিফল্ট করুন ( nilযা সহৃদয় বোকামি সহ )

Option3

class Actor {
let agent : String? = nil // very useless, but doable.
let company: String? = "Universal" 
}

আপনি যদি জানতে আগ্রহী হন যে কেন let(বিপরীতে var) আরম্ভ করা হয়নি nilতবে এখানে এবং এখানে পড়ুন


2
এটি যুক্ত করার জন্য আপনাকে ধন্যবাদ কারণ এটি ছবির একটি সমালোচনা অংশ ছিল।
জিম

ভাল করে বুঝিয়েছি !!
মহেন্দ্র

1
নিলে সেট করা নির্বোধ নয়, তবে কতগুলি মডেল কাজ করে তা অন্তর্নিহিত।
অঙ্কিত ..

@ ড্রু .. অপরিবর্তনীয় কিছু সেট nilকরা খুব ভুল। একটি সেটিং varথেকে nilএকটি ভিন্ন জিনিস।
মধু

আরে হানি, অচল পদার্থের সাথে কথা বলছিল কে?
অঙ্কিত ..

10

আমার ক্ষেত্রে আমি এটির Boolমতো ঘোষণা করেছি :

var isActivityOpen: Bool 

উদাহরণস্বরূপ, আমি এটি মোড়ানো না করে এটি ঘোষণা করেছিলাম, এভাবেই আমি ( আরম্ভকারী নয় ) ত্রুটিটি সমাধান করেছি :

var isActivityOpen: Bool!

1

আপনার প্রশ্নের সুনির্দিষ্ট উত্তর নয় তবে যখন আমি এনামকে সম্পত্তি হিসাবে ঘোষণা করার সময় কোনও প্রাথমিক মূল্য সেট না করেছিলাম তখন আমি এই ত্রুটিটি পেয়েছি। আমি এই ত্রুটিটি সমাধানের জন্য এনামকে একটি প্রাথমিক মান নির্ধারণ করেছি। এটি কারও সহায়ক হতে পারে হিসাবে এখানে পোস্ট করা।


0

কেবলমাত্র হোমসেল শ্রেণীর জন্য আর ডি ব্লক সরবরাহ করুন

এটা আমার ক্ষেত্রে কাজ

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