আমরা একটি কাঠামো তৈরি করে শুরু করব যা একটি একক ট্রেডের জন্য ডেটা ধারণ করে।
একটি বাণিজ্য একটি গঠিত হয় amount
, একটি price
, এবং একটি value
. ব্যবসা সব সংরক্ষণ করা হয় TradesModel
, যা DCA (ডলার-গড় গড়) এর জন্য প্রয়োজনীয় সমস্ত গণনা করবে।
সার্জারির didSet
সম্পত্তি পর্যবেক্ষক ব্যবহার করা হয় যাতে trades
অ্যারে একটি নতুন খালি ট্রেড দেওয়া হয় যখন ব্যবহারকারী প্রদর্শিত ট্রেডের সংখ্যা বাড়াতে চায়।
এটি স্ক্রীনে আমরা যে সংখ্যাটি দেখতে আশা করি তার সাথে সামঞ্জস্য রেখে অ্যারের আকার রাখে, সূচকের বাইরের ত্রুটির সম্ভাবনা দূর করে।
ইন্টারফেসটি তিনটি কলাম সহ একটি টেবিলের আকার নেবে: পরিমাণ, মূল্য এবং মান। এগুলি যথাযথভাবে একটি ট্রেডের বৈশিষ্ট্যের সাথে সারিবদ্ধ, যার প্রতিটি কাস্টম ব্যবহার করে সেট করা হবে TextField
যা বলা হবে NumberTextField
.
আমরা এটি দিয়ে শুরু করার আগে, আমাদের একটি সাধারণ হেডার সারি তৈরি করতে হবে যা আমাদের প্রতিটি কলামের জন্য একটি শিরোনাম দেবে। মূল্য বা মান থেকে পরিমাণকে আলাদা করার অন্য কোন উপায় থাকবে না যদি আমরা এটি স্পষ্ট না করি যে কোনটি কোনটি।
আপনি লক্ষ্য করতে পারেন যে উপরের পুরো এইচস্ট্যাকটিতে রয়েছে disabled
সংশোধক সেট true
. এই প্রতিটি দেয় TextField
অ্যাপের অন্যদের মতো একই চেহারা, কিন্তু ব্যবহারকারী যা খুশি তাই এই শিরোনামগুলি সম্পাদনা করতে পারে না।
সার্জারির NumberTextField
একটি মধ্যে ফাঁক সেতু TextField
, যা একটি ব্যবহার করে String
ইনপুট জন্য, এবং ক Double
, যে বিন্যাসে আমরা আমাদের ডেটা থাকতে চাই।
সার্জারির TextField
একটি দশমিক কীপ্যাড আছে, তাই প্রচলিত আলফানিউমেরিক কীবোর্ড প্রদর্শিত হবে না। এটি সম্ভাব্য অক্ষরের সংখ্যা নাটকীয়ভাবে হ্রাস করে, তবে ব্যবহারকারীকে একাধিক ডট ইনপুট করা থেকে বিরত রাখার কিছু নেই। এটি সফলভাবে a তে রূপান্তর করবে না Double
, তাই আমরা এটা সম্ভব হতে চাই না.
এর একটি এক্সটেনশন String
একটি গণনাকৃত সম্পত্তি প্রদান করে যা আপনাকে সহজেই একাধিক বিন্দু আছে কিনা তা পরীক্ষা করতে দেয় এবং এটি সংরক্ষিত হয় valid
সম্পত্তি।
যখন ইনপুট অবৈধ হয়, TextField
ইনপুটটিকে লাল হিসাবে প্রদর্শন করবে এবং মানটিকে a তে রূপান্তর করার চেষ্টা করবে না Double
. যদি এটি বৈধ হয়, মান সেট করা হবে এবং ফেরত পাঠানো হবে Binding
.
TotalRowView
সমস্ত ব্যবসার পরিমাণের যোগফল গণনা করে যাতে আপনি দেখতে পারেন আপনার কতটা মালিক। মোট খরচও গণনা করা হয়েছে এবং এখানে দেখানো হয়েছে। তাদের মধ্যে ডলার খরচ গড়, যা মোট মূল্যকে মোট পরিমাণ দ্বারা ভাগ করে গণনা করা হয়। এই মানগুলির প্রতিটি a-তে একটি ধ্রুবক স্ট্রিং হিসাবে প্রদর্শিত হয় TextField
যেগুলি সম্পাদনা করা যাবে না, যাতে তাদের অ্যাপের বাকি অংশগুলির মতো একই স্টাইল থাকে৷
TradeQuantityView
আপনাকে কতগুলি সারি আছে তা নিয়ন্ত্রণ করতে দেয়। যেহেতু প্রতিটি সারি একটি ট্রেডকে প্রতিনিধিত্ব করে, আপনি সেগুলি করার সাথে সাথে নতুন ট্রেড যোগ করতে চাইবেন। এই সারি সহজভাবে a Stepper
যেটি ট্রেডের সংখ্যা প্রদর্শন করে।
দুর্ভাগ্যবশত Stepper
সম্ভাব্য মানগুলির একটি বদ্ধ পরিসরের প্রয়োজন, তাই সর্বাধিক সংখ্যক ট্রেড হার্ড-কোডেড হতে হবে। এই সর্বাধিক সংখ্যাটি আপনি যা চান তা হতে পারে, তবে সর্বাধিক মান ছাড়া একটি পরিসর নির্দিষ্ট করা অসম্ভব।
কিছু উপায়ে এটি সবচেয়ে গুরুত্বপূর্ণ দৃষ্টিভঙ্গি, কারণ এটি আপনাকে ডলার খরচ গড় গণনার জন্য ডেটা ইনপুট করতে দেয়। যখন পরিমাণ বা দাম TextField
সম্পাদিত হয়, onChange
বন্ধ কল setValue
ফাংশন.
এটি আবার মান গণনা করে, যা অন্য দুটি সংখ্যার একটি গুণ। তারপর ট্রেডটি ট্রেড অ্যারেতে আপডেট করা হয়, যা a হিসাবে পাস করা হয় @Binding
সম্পত্তি প্রত্যাশিত সূচকটি অ্যারেতে বিদ্যমান আছে কিনা তা নিশ্চিত করার জন্য একটি চেক করা হয়, পরিসীমার বাইরে একটি সূচকের ত্রুটি প্রতিরোধ করে।
যাইহোক, অ্যারেতে বিদ্যমান নেই এমন একটি ট্রেড আপডেট করা একটি অপ্রত্যাশিত আচরণ, আমি এখনও একটি যোগ করেছি fatalError
এটি ব্যাখ্যা করে কেন এটি একটি ব্যর্থ রাষ্ট্র।
মূল অ্যাপটি কেবলমাত্র একটি SwiftUI এর ভিতরে তৈরি করা সমস্ত সারিগুলির সংমিশ্রণ Form
. এটি এটিকে অনেকটা iOS-এর সেটিংস অ্যাপের মতো একটি চেহারা দেয় এবং এটি স্বয়ংক্রিয়ভাবে যেকোনো ডিভাইসের স্ক্রিন পূরণ করবে এবং স্ক্রিনে ফিট করার মতো অনেক সারি থাকলে স্ক্রোল করবে।
ভিউ শুধুমাত্র তাদের যা প্রয়োজন তা পাস করা হয়, যেমন ট্রেডের মোট সংখ্যা TradeQuantityView
এবং মোট পরিমাণ এবং মান TotalRowView
.
A ForEach
প্রতিটি সংখ্যার জন্য একটি ট্রেড দেখানোর জন্য ব্যবহৃত হয় যার দ্বারা নির্বাচিত মোট ট্রেড সংখ্যা পর্যন্ত TradeQuantityView
, এবং সূচকটি পাস করা হয় যাতে পরিবর্তন করা হলে অ্যারে আপডেট করা যায়।
এটি দেখতে কেমন হওয়া উচিত তা এখানে: