আইওএসে কীভাবে বড় এবং আনাড়ি ইউআইটিএবল ভিউ কনট্রোলার এড়ানো যায়?


36

আইওএসে এমভিসি-প্যাটার্ন প্রয়োগ করার সময় আমার একটি সমস্যা আছে। আমি ইন্টারনেটে অনুসন্ধান করেছি তবে এই সমস্যার কোনও ভাল সমাধান খুঁজে পাচ্ছি না।

অনেকগুলি UITableViewControllerবাস্তবায়ন বরং বড় বলে মনে হয়। বেশিরভাগ উদাহরণ যা আমি দেখেছি তা UITableViewControllerবাস্তবায়ন করতে দেয় <UITableViewDelegate>এবং <UITableViewDataSource>। এই বাস্তবায়নগুলি বড় হওয়ার বড় কারণ UITableViewController। একটি সমাধান হ'ল পৃথক শ্রেণি তৈরি করা যা প্রয়োগ করে <UITableViewDelegate>এবং <UITableViewDataSource>। অবশ্যই এই ক্লাসগুলির একটি রেফারেন্স থাকতে হবে UITableViewController। এই সমাধানটি ব্যবহার করে কোনও ত্রুটি রয়েছে? সাধারণভাবে আমি মনে করি আপনার প্রতিনিধি প্যাটার্নটি ব্যবহার করে অন্য "সহায়ক" ক্লাসে বা অনুরূপ কার্যকারিতাটি অর্পণ করা উচিত। এই সমস্যাটি সমাধানের কোনও সুপ্রতিষ্ঠিত উপায় আছে কি?

আমি চাই না যে মডেলটি খুব বেশি কার্যকারিতা ধারণ করবে, না দর্শন। আমি বিশ্বাস করি যে যুক্তিটি সত্যই নিয়ামক শ্রেণিতে হওয়া উচিত, যেহেতু এটি এমভিসি-প্যাটার্নের অন্যতম ভিত্তি। তবে বড় প্রশ্ন হ'ল:

আপনার এমভিসি-বাস্তবায়নের নিয়ামককে কীভাবে ছোট পরিচালনযোগ্য টুকরোগুলিতে ভাগ করা উচিত? (এই ক্ষেত্রে আইওএসে এমভিসির কাছে প্রযোজ্য)

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


1
"এই যুক্তিটি কেন এই সমাধানটি দুর্দান্ত।" :)
আকসুল

1
এটি পয়েন্টটির পাশে কিছুটা হলেও UITableViewControllerমেকানিকরা আমার কাছে বেশ অদ্ভুত বলে মনে হচ্ছে, তাই আমি সমস্যার সাথে সম্পর্কিত হতে পারি। আমি আসলে আনন্দিত আমি ব্যবহার করছি MonoTouch, কারণ MonoTouch.Dialogবিশেষভাবে এটা তোলে যে অনেক কাজ করা আরো সহজ iOS এ টেবিল সঙ্গে। এরই মধ্যে আমি কৌতূহল করছি যে, আরও জ্ঞানী ব্যক্তিরা এখানে কী পরামর্শ দিতে পারে ...
প্যাট্রিক ieউইক

উত্তর:


43

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

আমি পৃথক চেষ্টা করেছি UITableViewDataSourceএবং UITableViewDelegateবিভিন্ন বস্তুর মধ্যে প্রোটোকল, কিন্তু যে সাধারণত প্রতিনিধি প্রয়োজনের উপর প্রায় প্রতি পদ্ধতি ডেটাউত্স মধ্যে খনন হিসেবে একটি মিথ্যা বিভক্ত হচ্ছে শেষ পর্যন্ত (যেমন নির্বাচনের উপর জানতে প্রতিনিধি চাহিদা কি বস্তু দ্বারা প্রতিনিধিত্ব করা হয় নির্বাচিত সারি)। সুতরাং আমি ডেটাসোর্স এবং প্রতিনিধি উভয়ই একক বস্তুর সাথে শেষ করি। এই অবজেক্টটি সর্বদা একটি পদ্ধতি সরবরাহ করে -(id)tableView: (UITableView *)tableView representedObjectAtIndexPath: (NSIndexPath *)indexPathযা ডেটা উত্স এবং প্রতিনিধি উভয় দিকই তারা কী কাজ করছে তা জানতে হবে।

এটি আমার "স্তরের 0" উদ্বেগের বিচ্ছেদ। একই স্তরের দৃশ্যে যদি আমাকে বিভিন্ন ধরণের অবজেক্টগুলি উপস্থাপন করতে হয় তবে স্তর 1 জড়িত। উদাহরণস্বরূপ, কল্পনা করুন যে আপনাকে কোনও পরিচিতি অ্যাপ্লিকেশন লিখতে হয়েছিল a একটি পরিচিতির জন্য, আপনার কাছে ফোন নম্বর উপস্থাপনকারী সারি, অন্যান্য সারি ঠিকানাগুলি উপস্থাপন করে, অন্যরা ইমেল ঠিকানা উপস্থাপন করে এবং অন্যান্যও থাকতে পারে। আমি এই পদ্ধতির এড়াতে চাই:

- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath {
  id object = [self tableView: tableView representedObjectAtIndexPath: indexPath];
  if ([object isKindOfClass: [PhoneNumber class]]) {
    //configure phone number cell
  }
  else if …
}

দুটি সমাধান এখনও পর্যন্ত তাদের উপস্থাপন করেছে। একটি হ'ল गतिशीलভাবে একটি নির্বাচক নির্মাণ করা:

- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath {
  id object = [self tableView: tableView representedObjectAtIndexPath: indexPath];
  NSString *cellSelectorName = [NSString stringWithFormat: @"tableView:cellFor%@AtIndexPath:", [object class]];
  SEL cellSelector = NSSelectorFromString(cellSelectorName);
  return [self performSelector: cellSelector withObject: tableView withObject: object];
}

- (UITableViewCell *)tableView: (UITableView *)tableView cellForPhoneNumberAtIndexPath: (NSIndexPath *)indexPath {
  // configure phone number cell
}

এই পদ্ধতির ক্ষেত্রে, if()নতুন ধরণের সমর্থনের জন্য আপনাকে এপিক ট্রিটি সম্পাদনা করার দরকার নেই - কেবল নতুন ক্লাসকে সমর্থন করে এমন পদ্ধতি যুক্ত করুন। এই টেবিল দর্শনটি কেবলমাত্র এই বিষয়গুলির প্রতিনিধিত্ব করার প্রয়োজন হয় বা এগুলি একটি বিশেষ উপায়ে উপস্থাপন করার প্রয়োজন হলে এটি দুর্দান্ত পদ্ধতির। যদি একই বিষয়গুলি বিভিন্ন উপাত্ত উত্স সহ বিভিন্ন টেবিলগুলিতে উপস্থাপিত করা হয় তবে সেল পদ্ধতির ডেটা উত্সগুলি জুড়ে ভাগ করা প্রয়োজন হওয়ায় এই পদ্ধতিটি ভেঙে যায় — আপনি একটি সাধারণ সুপারক্লাস সংজ্ঞা দিতে পারেন যা এই পদ্ধতিগুলি সরবরাহ করে, বা আপনি এটি করতে পারেন:

@interface PhoneNumber (TableViewRepresentation)

- (UITableViewCell *)tableView: (UITableView *)tableView representationAsCellForRowAtIndexPath: (NSIndexPath *)indexPath;

@end

@interface Address (TableViewRepresentation)

//more of the same…

@end

তারপরে আপনার ডেটা উত্স শ্রেণিতে:

- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath {
  id object = [self tableView: tableView representedObjectAtIndexPath: indexPath];
  return [object tableView: tableView representationAsCellForRowAtIndexPath: indexPath];
}

এর অর্থ হ'ল যে কোনও ডেটা উত্সের জন্য ফোন নম্বর, ঠিকানা ইত্যাদি প্রদর্শন করা দরকার কেবল কোনও টেবিল ভিউ সেলের জন্য যে কোনও অবজেক্ট প্রতিনিধিত্ব করা উচিত তা জানতে চাইতে পারেন । ডেটা উত্স নিজেই অবজেক্টটি প্রদর্শিত হচ্ছে সে সম্পর্কে কিছু জানার দরকার নেই।

"তবে অপেক্ষা করুন," আমি একটি হাইপোটিটিকাল ইন্টারলিওক্টর ইন্টারজেক্ট শুনি, "এটি এমভিসি ভেঙে দেয় না ? আপনি কি মডেল ক্লাসে ভিউ ডিটেল রাখছেন না?"

না, এটি এমভিসি ভঙ্গ করে না। আপনি এই ক্ষেত্রে বিভাগগুলি ডেকরেটারের প্রয়োগ হিসাবে বিবেচনা করতে পারেন ; তাই PhoneNumberএকটি মডেল ক্লাস হয় কিন্তু PhoneNumber(TableViewRepresentation)একটি দৃশ্য বিভাগ। ডেটা উত্স (একটি নিয়ামক বস্তু) মডেল এবং ভিউয়ের মধ্যে মধ্যস্থতা করে, তাই এমভিসি আর্কিটেকচারটি এখনও ধারণ করে।

অ্যাপলের ফ্রেমওয়ার্কগুলিতে আপনি এই বিভাগগুলির সজ্জা হিসাবে দেখতে পারেন। NSAttributedStringকিছু পাঠ্য এবং বৈশিষ্ট্য ধারণ করে এটি একটি মডেল শ্রেণি। অ্যাপকিট সরবরাহ করে NSAttributedString(AppKitAdditions)এবং ইউআইকিট সরবরাহ করে NSAttributedString(NSStringDrawing), সজ্জা বিভাগগুলি যা এই মডেল ক্লাসগুলিতে অঙ্কন আচরণ যুক্ত করে।


শ্রেণীর ডেটা উত্স এবং টেবিল ভিউ প্রতিনিধি হিসাবে কাজ করছে এমন একটি ভাল নাম কী?
জোহান কার্লসন

1
@ জোহানকার্লসন আমি প্রায়শই একে ডেটা উত্স বলি। এটি সম্ভবত কিছুটা opিলে ,ালা, তবে আমি প্রায় দুটিই একত্রিত করে জানতে পারি যে আমার "ডেটা উত্স" অ্যাপলের আরও সীমাবদ্ধ সংজ্ঞা হিসাবে অভিযোজিত।

1
এই নিবন্ধ: objc.io/issue-1/table-views.html একাধিক ঘরের হ্যান্ডেল করার একটি উপায় প্রস্তাব করে যার মাধ্যমে আপনি cellForPhotoAtIndexPathডেটা উত্সের পদ্ধতিতে সেল শ্রেণীর কাজ করেন , তারপরে একটি উপযুক্ত কারখানা পদ্ধতি কল করুন। কোনটি অবশ্যই সম্ভব যখন নির্দিষ্ট ক্লাস পূর্বে নির্দিষ্ট সারি দখল করে। মডেলগুলির ভিত্তিতে বিভাগগুলি দেখার-উত্স-উত্পাদনের সিস্টেমটি অনুশীলনে অনেক বেশি মার্জিত, আমি মনে করি, যদিও এটি সম্ভবত এমভিসি-তে একটি অপ্রচলিত পদ্ধতি! :)
বেনজি XVI

1
আমি github.com/yonglam/TableViewPattern এ এই প্যাটার্নটি ডেমো করার চেষ্টা করেছি । আশা করি এটি কারওর জন্য কাজে লাগবে।
অ্যান্ড্রু

1
গতিশীল নির্বাচক পদ্ধতির জন্য আমি একটি নির্দিষ্ট সংখ্যক ভোট দেব । এটি অত্যন্ত বিপজ্জনক কারণ সমস্যাগুলি কেবল রান সময় প্রকাশিত হয়। প্রদত্ত নির্বাচক উপস্থিত রয়েছে এবং এটি সঠিকভাবে টাইপ করেছে এবং এই ধরণের পদ্ধতির অবশেষে বিচ্ছিন্ন হয়ে পড়বে এবং এটি বজায় রাখার জন্য দুঃস্বপ্ন বলে নিশ্চিত করার কোনও স্বয়ংক্রিয় উপায় নেই । অন্য পদ্ধতিটি অবশ্য খুব চালাক ver
mkko

3

লোকেরা ইউআইভিউকন্ট্রোলার / ইউআইটিএবলভিউ কনট্রোলারটিতে প্রচুর প্যাক করে to

অন্য শ্রেণীর প্রতিনিধি (ভিউ কন্ট্রোলার নয়) সাধারণত সূক্ষ্মভাবে কাজ করে। প্রতিনিধিদের অগত্যা ভিউ কন্ট্রোলারের কাছে কোনও রেফারেন্সের প্রয়োজন হয় না, যেহেতু সমস্ত প্রতিনিধি পদ্ধতিগুলি একটি রেফারেন্স পাস করে UITableView, তবে তাদের যে ডেটাটি অর্পণ করা হচ্ছে তাতে কোনওভাবে তাদের অ্যাক্সেসের প্রয়োজন হবে।

দৈর্ঘ্য হ্রাস করতে পুনর্গঠনের জন্য কয়েকটি ধারণা:

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

  • যদি আপনার প্রতিনিধি পদ্ধতিতে প্রচুর 'if' স্টেটমেন্ট থাকে (বা স্যুইচ স্টেটমেন্ট) এটি একটি ক্লাসিক লক্ষণ যে আপনি কিছু রিফ্যাক্টরিং করতে পারেন

এটি সর্বদা আমার কাছে কিছুটা মজার মনে UITableViewDataSourceহয়েছিল যে সঠিকভাবে ডেটা সঠিকভাবে পরিচালনা করতে এবং এটি প্রদর্শনের জন্য একটি ভিউ কনফিগার করার জন্য দায়বদ্ধ । একটি দুর্দান্ত রিফ্যাক্টরিং পয়েন্ট হ'ল আপনার cellForRowAtIndexPathঘরে কোনও ডাটাতে প্রদর্শিত হবার জন্য হ্যান্ডেলটি পেতে নিজের পরিবর্তন করতে হবে, তারপরে সেল ভিউ তৈরির জন্য অন্য প্রতিনিধিকে (যেমন একটি CellViewDelegateবা অনুরূপ তৈরি করুন) উপযুক্ত ডেটা আইটেমটিতে পাস করা হবে।


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

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

@ গ্রাহামলি হ্যাঁ, আমি বহুকর্ম জানি ;-) তবে কীভাবে এই প্রসঙ্গে এটি প্রয়োগ করা যায় তা সম্পর্কে আমি নিশ্চিত নই। দয়া করে এ সম্পর্কে বিস্তারিত বলুন।
জোহান কার্লসন

@ জোহানকার্লসন করেছেন;)

2

অনুরূপ সমস্যার মুখোমুখি হয়ে আমি বর্তমানে যা করছি তা এখানে রয়েছে:

  • এক্সপ্লোর পরিচালনা ডেটা সোর্স শ্রেণিতে ডেটা সম্পর্কিত ক্রিয়াকলাপ সরান (যা বেসডাটাসোর্স: এনএসবজেক্ট থেকে উত্তরাধিকার সূত্রে প্রাপ্ত)। বেসডাটাসোর্স কিছু সুবিধাজনক পদ্ধতি সরবরাহ করে যেমন - (NSUInteger)rowsInSection:(NSUInteger)sectionNum;সাবক্লাস ডেটা লোডিং পদ্ধতিকে ওভাররাইড করে (অ্যাপ্লিকেশনগুলিতে সাধারণত কিছু ধরণের অফলির ক্যাশে লোড পদ্ধতি দেখা - (void)loadDataWithUpdateBlock:(LoadProgressBlock)dataLoadBlock completion:(LoadCompletionBlock)completionBlock;যায় যাতে আমরা নেটওয়ার্ক থেকে তথ্য আপডেট করার সময় লোডপ্রোগ্রেস ব্লকটিতে প্রাপ্ত ক্যাশেড ডেটা সহ ইউআই আপডেট করতে পারি, এবং সম্পূর্ণতা ব্লক আমরা ইউআই-কে নতুন ডেটা দিয়ে রিফ্রেশ করি এবং প্রগেস সূচকগুলি সরিয়ে রাখি, যদি থাকে)। এই ক্লাসগুলি UITableViewDataSourceপ্রোটোকলের সাথে খাপ খায় না ।

  • BaseTableViewController (যা কে কনর্ফাম করে সালে UITableViewDataSourceএবং UITableViewDelegateপ্রোটোকল) আমি BaseDataSource, যা আমি নিয়ামক Init সময় তৈরি করতে রেফারেন্স আছে। ইন UITableViewDataSourceনিয়ামক অংশ আমি কেবল ডেটাউত্স (যেমন থেকে মানগুলি আসতে - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [self.tableViewDataSource sectionsCount]; })।

এখানে বেস ক্লাসে আমার সেলফোরআউ (সাবক্লাসে ওভাররাইড করার দরকার নেই):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = [NSString stringWithFormat:@"%@%@", NSStringFromClass([self class]), @"TableViewCell"];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (!cell) {
        cell = [self createCellForIndexPath:indexPath withCellIdentifier:cellIdentifier];
    }
    [self configureCell:cell atIndexPath:indexPath];
    return cell;
}

কনফিগারকেল অবশ্যই সাবক্লাসের দ্বারা ওভাররাইড করা উচিত এবং ক্রিয়েল সেল ইউআইটিবেলভিউসেলকে রিটার্ন দেয়, সুতরাং আপনি যদি কাস্টম সেল চান তবে এটিও ওভাররাইড করুন।

  • বেস জিনিসগুলি কনফিগার হওয়ার পরে (আসলে প্রথম প্রকল্পে যা এই জাতীয় স্কিম ব্যবহার করে, তার পরে এই অংশটি পুনরায় ব্যবহার করা যেতে পারে) BaseTableViewControllerসাবক্লাসের জন্য যা অবশিষ্ট রয়েছে তা হ'ল:

    • কনফিগার সেলকে ওভাররাইড করুন (এটি সাধারণত সূচক পাথের জন্য অবজেক্টের জন্য ডেটা সোর্স জিজ্ঞাসা করে এটি সেলের কনফিগার উইথএক্সএক্সএক্সএক্স: পদ্ধতিতে বা ব্যবহারকারী 4051 এর উত্তরের মতো অবজেক্টের ইউআইটিএবল ভিউসেল উপস্থাপনা পাওয়ার জন্য রূপান্তর করে)

    • ওভাররাইড ডিলেকশনরোঅ্যাট ইন্ডেক্সপথ: (স্পষ্টতই)

    • বেসডাটাসোর্স সাবক্লাস লিখুন যা মডেলটির প্রয়োজনীয় অংশের সাথে কাজ করার যত্ন নেয় (ধরুন এখানে 2 টি শ্রেণি রয়েছে Accountএবং Languageসুতরাং সাবক্লাস হবে অ্যাকাউন্টডাটাসোর্স এবং ল্যাঙ্গুয়েড ডেটা সোর্স)।

এবং এটিই টেবিল ভিউ অংশের জন্য। প্রয়োজনে আমি গিটহাবে কিছু কোড পোস্ট করতে পারি।

সম্পাদনা করুন: http://www.objc.io/issue-1/litter-view-controllers.html (যা এই প্রশ্নের লিঙ্ক আছে) এবং টেবিলভিউ নিয়ন্ত্রণকারীদের সম্পর্কে সহযোগী নিবন্ধে কিছু পুনঃসংশোধনগুলি পাওয়া যাবে।


2

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

https://github.com/fastred/ConfigurableTableViewController

এটি আপনার কাছে যাওয়ার পথে পরিবর্তন হতে পারে।


2

ইউআইটিএবলভিউয়ের জন্য কীভাবে প্রতিনিধি এবং ডেটা উত্স প্রয়োগ করতে হবে সে সম্পর্কে আমি সম্প্রতি একটি নিবন্ধ লিখেছি: http://gosuwachu.gitlab.io/2014/01/12/uitableview-controller/

মূল ধারণাটি হ'ল সেল ফ্যাক্টরি, বিভাগ কারখানার মতো আলাদা ক্লাসে দায়িত্ব বিভক্ত করা এবং ইউআইটিএবলভিউ যে মডেলটি প্রদর্শন করতে চলেছে তার জন্য কিছু জেনেরিক ইন্টারফেস সরবরাহ করা। নীচের চিত্রটি এগুলি সমস্ত ব্যাখ্যা করে:

এখানে চিত্র বর্ণনা লিখুন


এই লিঙ্কটি আর কাজ করছে না।
Koen

1

সলাইড নীতি অনুসরণ করে এ জাতীয় যে কোনও সমস্যা সমাধান করবে।

আপনি যদি আপনার ক্লাসগুলিতে কেবল একটি সাধারণ দায়িত্ব পেতে চান তবে আপনার পৃথক DataSourceএবং Delegateক্লাস সংজ্ঞায়িত করা উচিত এবং কেবল তাদের মালিকের কাছে ইনজেকশন করা উচিত tableView(হতে পারে UITableViewControllerবা UIViewControllerঅন্য কিছু হতে পারে )। আপনি উদ্বেগের বিচ্ছেদকে এভাবেই কাটিয়ে উঠলেন

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

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