উত্তর:
আপনি "প্যাটার্ন-ম্যাচ" অপারেটরটি ব্যবহার করতে পারেন ~=
:
if 200 ... 299 ~= statusCode {
print("success")
}
বা এক্সপ্রেশন প্যাটার্ন সহ একটি স্যুইচ-বিবৃতি (যা অভ্যন্তরীণভাবে প্যাটার্ন-ম্যাচ অপারেটরটি ব্যবহার করে):
switch statusCode {
case 200 ... 299:
print("success")
default:
print("failure")
}
নোট করুন যে ..<
উপরের মান বাদ দেয় এমন একটি পরিসীমা চিহ্নিত করে যাতে আপনি সম্ভবত চান 200 ... 299
বা চান
200 ..< 300
।
অতিরিক্ত তথ্য: উপরের কোডটি যখন এক্সকোড 6.৩ এ সংকলিত হয় তখন অপ্টিমাইজেশন স্যুইচ করা থাকে, তারপরে পরীক্ষার জন্য
if 200 ... 299 ~= statusCode
আসলে কোনও ফাংশন কল মোটেই উত্পন্ন হয় না, কেবল তিনটি সংসদীয় নির্দেশ:
addq $-200, %rdi
cmpq $99, %rdi
ja LBB0_1
এটি হ'ল একই সমাবেশ কোড যা এর জন্য উত্পন্ন হয়
if statusCode >= 200 && statusCode <= 299
আপনি এটি দিয়ে যাচাই করতে পারেন
xcrun -sdk macosx swiftc -O -emit-সমাবেশ main.swift
সুইফট 2 হিসাবে, এটি হিসাবে লেখা যেতে পারে
if case 200 ... 299 = statusCode {
print("success")
}
if- স্টেটমেন্টের জন্য সদ্য প্রবর্তিত প্যাটার্ন-ম্যাচিং ব্যবহার করে। সুইফট 2 - "যদি" তে প্যাটার্নের মিলও দেখুন ।
func ~= (Range<A>, A) -> Bool
বলা হয়। আমি ধরে নেব যে এই ফাংশনটি ও (1) এর সাথে কাজ করে।
xcrun -sdk macosx swift -emit-assembly main.swift
করে সমাবেশ কোডটি পরিদর্শন করেছি insp তারপরে আমি xcrun swift-demangle ...
ডাকা ফাংশনটির নামটি ডি-ম্যাঙ্গেল করতাম । - দুর্ভাগ্যক্রমে, এক্সকোড এখনও সুইফ্ট ফাইলগুলির জন্য সমাবেশ কোড তৈরি করতে পারে না, সম্ভবত এটি পরবর্তী সংস্করণে কাজ করবে।
এই সংস্করণটি প্যাটার্ন মিলের চেয়ে বেশি পঠনযোগ্য বলে মনে হচ্ছে:
if (200 ... 299).contains(statusCode) {
print("Success")
}
এটি একটি পুরানো থ্রেড, তবে আমার কাছে মনে হচ্ছে আমরা এটি অতিরিক্ত চিন্তা করছি। আমার কাছে মনে হয় এর সেরা উত্তরটি ন্যায্য
if statusCode >= 200 && statusCode <= 299
নেই
if 200 > statusCode > 299
যে ফর্মটি সম্পর্কে আমি অবগত রয়েছি এবং অন্য প্রস্তাবিত সমাধানগুলি ফাংশন কলগুলি করছে যা পড়া খুব শক্ত এবং এটি কার্যকর করতে ধীর হতে পারে। প্যাটার্ন মিলের পদ্ধতিটি জানার জন্য একটি দরকারী কৌশল, তবে এই সমস্যার জন্য এটি বেশ উপযুক্ত বলে মনে হচ্ছে।
ব্যক্তিগতভাবে, আমি প্যাটার্ন ম্যাচ অপারেটরটিকে ঘৃণ্য বলে মনে করি এবং আশা করি সংকলকটি if x in 1...100
সিনট্যাক্স সমর্থন করবে । এটি তুলনায় অনেক বেশি স্বজ্ঞাত এবং পড়া সহজif 1...100 ~= x
if 200 ... 299 ~= statusCode
, কোনও ফাংশন কল নেই :)
if 200 ... 299 ~= statusCode
দেয়if statusCode >= 200 && statusCode <= 299
আমি 401 ব্যতীত 4xx ত্রুটি পরীক্ষা করতে চেয়েছিলাম wanted কোডটি এখানে:
let i = 401
if 400..<500 ~= i, i != 401 {
print("yes")
} else {
print("NO")
}
আমি রেঞ্জ। কনটেনস () অপারেটরটিকেও পছন্দ করেছি, যতক্ষণ না এটির প্রয়োগ কার্যকর হয় না - https://oleb.net/blog/2015/09/swift-ranges-and-intervals/
আমরা রেঞ্জ ব্যবহার করে এক্স <0 শর্তটি উপস্থাপন করতে পারি: (অন্তঃমিনি .. <0)। কনটেন্টস (এক্স) হুবহু সমতুল্য। যদিও এটি যথেষ্ট ধীরে ধীরে। (_ :) সমন্বিত ডিফল্ট বাস্তবায়ন পুরো সংগ্রহটিকে ঘুরিয়ে দেয় এবং সবচেয়ে খারাপ অবস্থায় লুপ নয়টি পঞ্চম বার কার্যকর করা সস্তা নয়।