ডেভসংকেত

সুইফট

সুইফট প্রোগ্রামিং এর চিটশিট

কন্ট্রিবিউটর

    শেয়ার করুন

    কনসোলে ইনপুট/ আউটপুট

    • ইনপুট নেয়া

      let input = readLine()
    • আউটপুট দেয়া

      print(output)

    অ্যারে

    • নতুন অ্যারে তৈরি

      var array = [TYPE]()
    • অ্যারে লেন্থ

      array.count
    • i তম ইনডেক্সের মান বের করা

      array[i]
    • অ্যারেতে কোন মান আছে কিনা চেক করা

      array.contains(value)
    • অ্যারের কোন ইলিমেন্টের ইনডেক্স বের করা

      let i = array.firstIndex(of: value) অপশনাল রিটার্ন করবে, কারণ value অ্যারেতে নাও থাকতে পারে!
    • সর্ট করা (অ্যাসেন্ডিং অর্ডার)

      array.sorted()
    • সর্ট করা (ডিসেন্ডিং অর্ডার)

      array.sort { $0 > $1 }

    ডিকশনারি

    • তৈরি করা

      var dict = [KeyType: ValueType]()
    • ডিকশনারি ইলিমেন্ট যোগ করা

      dict[key] = value
    • ইলিমেন্ট বাদ দেয়া

      dict.removeValue(forKey: key)
    • খালি করে দেয়া

      dict.removeAll

    নেটওয়ার্কিং বেসিকস

    • GET

      URLSession.shared.dataTask(with: url) { (data, response, error) in  print(data) }
    • রিমোট URL থেকে ইমেজ লোড করা

      DispatchQueue.global().async { guard let imageData = try? Data(contentsOf: imageURL) else { return }; let image = UIImage(data: imageData) }

    SwiftUI - Image

    • ইমেজ নেম থেকে লোড করা

      Image("hello_world ")
    • ইমেজে সিস্টেম আইকন ইউস করা

      Image(systemName: "cloud.heavyrain.fill")
    • ইমেজে স্টাইল যোগ করা

      Image("hello_world").resizable().aspectRatio(contentMode: .fill).padding(.bottom)

    SwiftUI - State, ObservedObject এবং EnvrioonmentObject

    • কাজ কি?

      সবগুলোই অবজার্ভার প্যাটার্ন ফলো করে। ডাইনামিক বাইন্ডিং এ ব্যবহার করা যায়।
    • পার্থক্য

      পার্থক্য স্কোপে আর কি ধরণের ডেটার সাথে ব্যবহার করা যায় তার ওপর। State -> ভিউ অনলি স্কোপ, প্রিমিটিভ/ সিম্পল টাইপ ইউস করা যায়। ObservedObject -> কাস্টম টাইপ ইউস করা যায়, এবং এক ভিউ থেকে আরেক ভিউ তে ডেটা পাস করতেও ইউস করা যায়( টু ওয়ে বাইন্ডিং)। EnvironmentObject -> পুরো অ্যাপ্লিকেশন স্কোপে ইউস করা যায়, সিম্পল বা কাস্টম দুই টাইপের সাথেই ইউস করা যায়।

    থার্ড পার্টি লাইরেরি ইন্টিগ্রেশন - Cocoapods

    • প্রোজেক্টে কোকোয়াপড ইনিশিয়ালাইজ করা

      pod init
    • সব POD ইন্সটল করা

      pod install

    সুইফট ৫ এ র স্ট্রিং

    • র স্ট্রিং সিনট্যাক্স

      let rawString = #"\Hello \World"#
    • ইন্টারপোলেশন

      let name = "devsonket"; let greeting = #"Hello, \#(name)"#
    • রেগুলার এক্সপ্রেশন কন্সট্রাকশন

      let regex = try NSRegularExpression(pattern: #"\\([^)]+\)"#)

    স্ট্রিং

    • স্ট্রিং ইন্টারপোলেশন

      let str = "This is some \(value)"
    • স্ট্রিং এর লেন্থ বের করা

      str.count
    • স্ট্রিং এর i তম ইনডেক্সের মান বের করা

      str[ str.index(str.startIndex, offsetBy: i) ]
    • নতুন স্ট্রিং অ্যাপেন্ড করা

      str.append(newString)
    • লোয়ারকেস করা

      str.lowercased()
    • আপারকেস করা

      str.uppercased()

    অপশনাল

    • ফোর্স আনর‍্যাপ করা (আনসেইফ)

      let unwrapped = optionalVar!
    • nil কোলেসিং, অপশনালে nil পাওয়া গেলে ডিফল্ট মান দেয়া

      let responseCode = code ?? 404
    • সেইফ আনর‍্যাপিং

      উদাহরণ ১ - if let unwrapped = optVar { // do something} উদাহরণ ২ - guard let unwrapped = optVar else { return }
    • guard let এবং if let এর তফাৎ

      guard let যে ব্লকে থাকে, nil পেলে সে ব্লক এক্সিট করে। if let ব্লক এক্সিট করে না। অপশনালের মান বাদে যদি ব্লকের কাজ না হয় তাহলে guard let ব্যবহার করাই উত্তম।

    JSON ডিকোড করা

    • JSONDecoder দিয়ে ডিকোড করা - ১

      struct হিসেবে মডেল টাইপ বানাতে হবে
    • JSONDecoder দিয়ে ডিকোড করা - ২

      do { let json = try JSONDecoder().decode(ModelStruct.self, from: data) } catch {}

    SwiftUI এর টুকিটাকি

    • একটা ভিউতে কয়টা সাবভিউ থাকবে?

      একটা ভিউ থেকে একটাই সাব ভিউ রিটার্ন করা যাবে। এর বেশি চাইলে নেস্টেড চিলড্রেন হিসাবে রিটার্ন করতে হবে।
    • ইমেজে গোলাকার ফ্রেম দেয়া

      Image(image).clipShape(Circle())
    • গোলাকার ফ্রেমে ওভারলে দেয়া

      উদাহরণঃ ২ উইডথের গ্রে ওভারলে- Image(image).clipShape(Circle()).overlay(Circle().stroke(Color.gray, lineWidth: 2))
    • দুই ভিউ এর মাঝে সম্পূর্ণ ফাঁকা জায়গা ব্ল্যাংক স্পেস হিসেবে ইউস করা

      Spacer()
    • ভিউ কেমন স্পেস খাবে সেজন্য প্রায়োরিটি সেট করা

      layoutPriority(priority) ডিফল্ট ভ্যালু হচ্ছে 0, কোন ভিউকে ডমিনেন্টলি দেখাতে চাইলে: 1, কোন কারণে স্ক্রিনে স্পেস কমে গেলে ডমিনেন্ট ভিউ বাদে বাকিগুলো ক্লিপ করে দিবে
    • সেইফ এরিয়া ইগনোর করে পুরো স্ক্রিন জুড়ে ভিউ সেট করা

      .edgesIgnoringSafeArea(.all)
    • ভিউ রোটেট করা

      Text("Up we go!").rotationEffect(.degrees(angle))
    • বর্ডার দেয়া

      উদাহরণ লাল বর্ডার - .border(Color.red, width: 4)

    SwiftUI - লে আউট

    • VStack - ভার্টিকালি সাজানো

      VStack {Text("Hello"); Text("World")}
    • HStack - হরাইজন্টালি সাজানো

      HStack {Text("Hello"); Text("World")}
    • ZStack - ওভারল্যাপ

      ZStack {Image("hello"); Text("World")}

    SwiftUI - ভিউ লাইফ সাইকেল

    • যখন ভিউ লোড হয়

      onAppear()
    • ভিউ যখন ডিসকার্ড হয়

      onDisappear()

    থার্ড পার্টি লাইরেরি ইন্টিগ্রেশন - Swift Package Manager

    • প্যাকেজ অ্যাড করা

      এক্সকোড ১১ থেকে সরাসরি সুইফট প্যাকেজ প্রোজেক্টে অ্যাড করা যাত। প্যাকেজের গিটহাব বা গিটল্যাব লিংক দিয়ে সার্চ করলেই এক্সকোড অ্যাড করে নিবে।
    • মেনুতে

      File > Swift Package > Add Package Dependency

    ডেভসংকেত সম্পর্কে

    ডেভসংকেত এর লক্ষ্য হচ্ছে বাংলাতে একটা বড় চিটশিটের ভান্ডার গড়ে তোলা। এটা সম্পূর্ণ স্বাধীন এবং ওপেন সোর্স গিটহাব অর্গানাইজেশন।

    স্পন্সর