সুইফটে, অ্যারে [স্ট্রিং] স্লাইসিং রিটার্নের প্রকারটি [স্ট্রিং] বলে মনে হয় না


87

আমি স্ট্রিংগুলির একটি অ্যারে টুকরা করছি এবং এটি একটি [String]ভেরিয়েবলের সাথে সেট করে দিচ্ছি , তবে টাইপ পরীক্ষক অভিযোগ করছেন। এটি কি একটি সম্ভাব্য সংকলক বাগ?

var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]

স্ক্রিনশট

উত্তর:


169

একটি ব্যাপ্তির সাথে অ্যারের সাবস্ক্রিপশন একটি অ্যারে ফেরত দেয় না, তবে একটি স্লাইস। আপনি যদিও এই স্লাইস থেকে একটি অ্যারে তৈরি করতে পারেন।

var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)

4
আপনি কোথায় Sliceডকুমেন্টেড পাবেন ? ত্রুটি বার্তাটিও ভুল এবং Sliceখেলার মাঠে [স্ট্রিং] হিসাবে প্রদর্শিত হয়। সুতরাং এটি মনে হয় যে দুটি সংকলক ত্রুটি এবং নথিভুক্তি রয়েছে।
zaph

4
সাবস্কিপ পদ্ধতির সংজ্ঞা আপনি এখানে দেখতে পাবেন: বিকাশকারী
কনার

4
আমি সম্মত হই যে ত্রুটিটি ভুল এবং ডকুমেন্টেশন কিছু কাজ ব্যবহার করতে পারে। আপনি যদি দুটি পদক্ষেপে এটি ব্যবহার করে থাকেন: var someTags = tags[1..<3] var someTagsArray: [String] = someTagsএটি আপনাকে আরও সহায়ক দেয়error: 'Slice<String>' is not convertible to '[String]'
কনার 21

আমার দোষ, আমি সুইফট আইবুকগুলির দিকে চেয়েছিলাম। আমি মনে করি আপেলকে সেগুলি আপ টু ডেট রাখতে হবে।
zaph

4
সুইফট 3 এর সাথে আমি তৃতীয় লাইনে একটি ত্রুটি পেয়েছি, "টাইপ 'স্ট্রিং' প্রোটোকল 'সূচীকরণযোগ্য' অনুসারে নয়"।
রেনিপেট

14
var tags = ["this", "is", "cool"]
var someTags: [String] = Array(tags[1..<3])
println("someTags: \(someTags)") // "someTags: [is, cool]"

0

স্লাইসের একটি নতুন অ্যারে পেতে আপনি এটিও করতে পারেন:

var tags = ["this", "is", "cool"]
var someTags = [String]()
someTags += tags[1..<3]
println(someTags[0])  //prints ["is", "cool"]

এটি ঠিক আছে, তবে এটি বিভ্রান্তিকর।
ডনসং

আমি প্রত্যাশা করেছি যে এটি "এটি" মুদ্রণ করবে
Yitzchak

0

এক জায়গায় এটি করার আরেকটি উপায় হ'ল পরিবর্তনশীল ঘোষণা একত্রিত করা let someTags: [String]এবং map(_:)এটি রূপান্তরিত ArraySlice<String>হবে [String]:

let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]

0

আরেকটি সুবিধাজনক উপায় একটি রূপান্তর করতে ArraySliceকরতে Arrayএই হল:

var tags = ["this", "is", "cool"] var someTags: [String] = tags[1..<3] + []

এটি নিখুঁত নয় কারণ অন্য বিকাশকারী (বা নিজে) যিনি পরে এটি দেখেন সে এর উদ্দেশ্য বুঝতে পারে না। সুসংবাদটি হ'ল যদি সেই বিকাশকারী (সম্ভবত আপনি) + []এগুলি সরিয়ে ফেলেন তবে তাদের তাত্ক্ষণিকভাবে একটি সংকলক ত্রুটির সাথে দেখা হবে, যা আশা করে এর উদ্দেশ্যটি স্পষ্ট করবে।


0

স্লাইসটি তৈরি হয়ে গেলে এটিটিকে অ্যারে হিসাবে কাস্ট করুন। একটি মধ্যবর্তী ভেরিয়েবল ব্যবহার না করে আপনার অ্যারেটিকে অ্যারে হিসাবে রাখা। কোডেবল টাইপ ব্যবহার করার সময় এটি দুর্দান্ত কাজ করে।

var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.