নীচের সমস্ত উদাহরণ ব্যবহার করে
var str = "Hello, playground"
startIndex
এবং endIndex
startIndex
প্রথম চরিত্রের সূচক
endIndex
শেষ চরিত্রের পরে সূচক হয় ।
উদাহরণ
// character
str[str.startIndex] // H
str[str.endIndex] // error: after last character
// range
let range = str.startIndex..<str.endIndex
str[range] // "Hello, playground"
সুইফট 4 এর একতরফা রেঞ্জের সাথে , পরিসীমাটি নিম্নলিখিত ফর্মগুলির মধ্যে একটিতে সরল করা যেতে পারে।
let range = str.startIndex...
let range = ..<str.endIndex
আমি স্পষ্টতার স্বার্থে অনুসরণের উদাহরণগুলিতে পূর্ণ ফর্মটি ব্যবহার করব, তবে পঠনযোগ্যতার জন্য আপনি সম্ভবত আপনার কোডে একতরফা রেঞ্জ ব্যবহার করতে চাইবেন।
after
হিসাবে: index(after: String.Index)
after
প্রদত্ত সূচকের পরে সরাসরি চরিত্রের সূচককে বোঝায়।
উদাহরণ
// character
let index = str.index(after: str.startIndex)
str[index] // "e"
// range
let range = str.index(after: str.startIndex)..<str.endIndex
str[range] // "ello, playground"
before
হিসাবে: index(before: String.Index)
before
প্রদত্ত সূচকের সরাসরি অক্ষরের সূচককে বোঝায়।
উদাহরণ
// character
let index = str.index(before: str.endIndex)
str[index] // d
// range
let range = str.startIndex..<str.index(before: str.endIndex)
str[range] // Hello, playgroun
offsetBy
হিসাবে: index(String.Index, offsetBy: String.IndexDistance)
offsetBy
মান ইতিবাচক বা নেতিবাচক এবং প্রদত্ত সূচি থেকে শুরু হতে পারে। যদিও এটি ধরণের String.IndexDistance
, আপনি এটি একটি দিতে পারেন Int
।
উদাহরণ
// character
let index = str.index(str.startIndex, offsetBy: 7)
str[index] // p
// range
let start = str.index(str.startIndex, offsetBy: 7)
let end = str.index(str.endIndex, offsetBy: -6)
let range = start..<end
str[range] // play
limitedBy
হিসাবে: index(String.Index, offsetBy: String.IndexDistance, limitedBy: String.Index)
limitedBy
নিশ্চিত করুন যে অফসেট সূচক সীমার বাইরে যেতে পারে না তৈরীর জন্য দরকারী। এটি একটি বাউন্ডিং সূচক। যেহেতু অফসেটের সীমা অতিক্রম করা সম্ভব, এই পদ্ধতিটি একটি anচ্ছিক প্রদান করে। nil
সূচক সীমার বাইরে থাকলে এটি ফিরে আসে ।
উদাহরণ
// character
if let index = str.index(str.startIndex, offsetBy: 7, limitedBy: str.endIndex) {
str[index] // p
}
যদি অফসেটের 77
পরিবর্তে থাকত 7
তবে if
বিবৃতিটি এড়িয়ে যায়।
স্ট্রিং.আইডেক্সের দরকার কেন?
এটা হবে অনেক একটি ব্যবহার করা আরো সহজ Int
স্ট্রিং জন্য সূচি। যে কারণে আপনাকে String.Index
প্রতিটি স্ট্রিংয়ের জন্য একটি নতুন তৈরি করতে হবে তা হ'ল সুইফ্টের অক্ষরগুলি হুডের নীচে সমস্ত একই দৈর্ঘ্য নয়। একটি একক সুইফ্ট চরিত্রটি এক, দুটি বা আরও বেশি ইউনিকোড কোড পয়েন্ট নিয়ে গঠিত হতে পারে। এইভাবে প্রতিটি অনন্য স্ট্রিংয়ের অবশ্যই তার অক্ষরগুলির সূচীগুলি গণনা করতে হবে।
এই জটিলতাটি কোনও ইনড ইনডেক্স এক্সটেনশনের পিছনে লুকিয়ে রাখা সম্ভবত, তবে আমি এটি করতে নারাজ। আসলে কী ঘটছে তা মনে করিয়ে দেওয়া ভাল।
startIndex
0 বাদে অন্য কিছু হবে ?