আমি কীভাবে সুইফটে একটি বাঁধার ভিতরে একটি alচ্ছিক মান আনরপ্ট করতে পারি?


9

আমি SwiftUI ব্যবহার করে একটি অ্যাপ নির্মাণের করছি এবং একটি উপায় একটি রূপান্তর করতে চাই Binding<Value?>একটি থেকে Binding<Value>।

আমার অ্যাপ্লিকেশনটিতে আমার একটি রয়েছে AvatarViewযা কোনও নির্দিষ্ট ব্যবহারকারীর জন্য কীভাবে কোনও চিত্র রেন্ডার করতে হয় তা জানে।

struct AvatarView: View {
  @Binding var userData: UserData

  ...
}

আমার অ্যাপ্লিকেশনটিতে ContentViewদুটি বাইন্ডিংয়ের মালিকানা রয়েছে : আইডি দ্বারা ব্যবহারকারীদের একটি অভিধান এবং সেই ব্যবহারকারীর আইডি যার অবতারটি আমাদের দেখানো উচিত।

struct ContentView: View {
  @State var userById: Dictionary<Int, UserData>
  @State var activeUserId: Int

  var body: some View {
    AvatarView(userData: $userById[activeUserId])
  }
}

সমস্যা: উপরের কোডটি একত্রিত হয় না কারণ $userById[activeUserId]এটি টাইপযুক্ত Binding<UserData?>এবং AvatarViewএকটিতে লাগে Binding<UserData>

যে জিনিসগুলি আমি চেষ্টা করেছি ...

  • $userById[activeUserId]!কাজ করে না কারণ এটি একটি মোড়কানোর চেষ্টা করছে Binding<UserData?>। আপনি কেবল একটিই আনপ্রেপ করতে পারেন Optional, একটি নয় Binding<Optional>

  • $(userById[activeUserId]!)যে কারণে আমি এখনও বুঝতে পারি না সেগুলির জন্য কাজ করে না, তবে আমি মনে করি $যে সংকলনের সময় এমন কিছু সমাধান করা হয়েছে যাতে আপনি স্বেচ্ছাসেবীর মত প্রকাশের উপস্থাপন করতে পারেন না $


আপনি চেষ্টা করেছেন $userById[activeUserId] as! Binding<UserData>?
কামরান

পরামর্শের জন্য ধন্যবাদ! আমি মনে করি এটি সম্ভবত ভাল কাজ করবে, তবে আমি কোনও অনিরাপদ অভিনন্দন না করাকে পছন্দ করব। যখন আমি এটি চেষ্টা করি তখন আমি "বিল্ডিং <ইউজারডাটা?> কে সম্পর্কহীন <ইউজারডাটা> বাঁধাইয়ের জন্য কাস্ট করুন" বলে বিল্ড হুঁশিয়ারি পেয়েছি
rjkaplan

উত্তর:


10

আপনি এই আরম্ভকারীটি ব্যবহার করতে পারেন , যা এই সঠিক কেসটিকে হ্যান্ডেল করে বলে মনে হচ্ছে - রূপান্তর Binding<T?>করে Binding<T>?:

var body: some View {
    AvatarView(userData: Binding($userById[activeUserId])!)
}

আমি !আপনার প্রচেষ্টার মতোই আনআরপটকে জোর করে ব্যবহার করেছি , তবে আপনি চাইলে nilঅবশ্য মোড়ানো করতে পারেন। এক্সপ্রেশন Binding($userById[activeUserId])টাইপ হয় Binding<UserData>?

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