দ্রুত একটি সতর্কতা নিঃশব্দ কিভাবে


105

আমার কাছে কোডের একটি টুকরা রয়েছে যা প্রচুর সতর্কতা উত্পন্ন করছে (অমিত এপিআই)

ঝাঁকুনি ব্যবহার করে * আমি করতে পারি

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    ...
#pragma clang diagnostic pop

তবে এটি দ্রুত কাজ করে না।

কীভাবে তাড়াতাড়ি করবেন?

দ্রষ্টব্য: আমি বিশ্বব্যাপী এই সতর্কতাটি অক্ষম করতে চাই না, এমনকি বৃহত্তর ফাইলও করতে চাই না, তবে আমার উত্স কোডের একটি নির্দিষ্ট অংশে একটি নির্দিষ্ট সতর্কতাটি অক্ষম করতে চাই।

সম্পাদনা: দেখে মনে হচ্ছে আমার নোটটি যথেষ্ট পরিষ্কার ছিল না: আমি শর্তসাপেক্ষ সংকলন চাই না (যা অনুমিত নকলের প্রস্তাবিত উত্তর)। আমি নতুন এপিআই ব্যবহার না করে কেবল একটি সতর্কতা নিঃশব্দ করতে চাই।



4
এটি কোনও সদৃশ নয়। অন্য প্রশ্নটি এই সমস্যার উত্তর দিতে ব্যর্থ।
ক্লজ জর্জেনসেন

@ ক্লজজোরজেনসেন কোনভাবে এই সমস্যার উত্তর দিতে ব্যর্থ হয়? সংযুক্ত প্রশ্নের উত্তরে বর্ণিত অন্য কোনও উপায় নেই। কেবল শর্তসাপেক্ষ সংকলন বা নতুন #availableম্যাক্রো যেখানে বিকাশকারীদের নতুন পদ্ধতি না পাওয়া গেলে পুরানোগুলিতে ফ্যালব্যাক ব্যবহার করা উচিত ones
zrzka

@ আরবার্টভোজতা না, যেমন উত্তরগুলি দেয়, আসলে তা বলে না যে কোনও সতর্কতা নিঃশব্দ করার উপায় নেই।
ক্লজ জর্জেনসেন

4
এটি কোনও দুপ নয়। এমন পরিস্থিতিতে কী হবে যেখানে আপনাকে প্রাথমিকের অনুপস্থিতির জন্য একটি সতর্কতা দেওয়া হয়েছিল?
এনএসটিজে

উত্তর:


169

2020, Xcode 12.0 হিসাবে, theক্যমত্য এটি অর্জন করার কোনও উপায় নেই।

অ্যাপল যদি বৈশিষ্ট্য যুক্ত করে তবে আমি এই উত্তরটি আপডেট / সম্পাদনা করব।

ডাব্লুডাব্লুডিসি 2021 এর জন্য এটি আপনার ইচ্ছার তালিকায় রাখুন!


23
জঘন্য, এটি একটি গুঁড়ো। এটি কখনও কখনও হাত বাইরে পায় । এটি কমপক্ষে বলতে বিরক্তিকর।
ইসুরু

4
আমি এই উত্তরটি কয়েক মিলিয়ন বারে নামতে চাই, তবে এটি প্রশ্নের উত্তরটি বেশ ভালভাবে দেবে তাই +1 :-)
ডেডবাইফ

4
@ Sসুরু এই মুহুর্তে আমি পুরো জিনিসটি পুনর্নির্মাণের জন্য যথেষ্ট বিরক্ত হব। অনুমান করে সতর্কতাগুলি কাজ করেছে
সাইরেনস

4
@ ইসুুরু এদের বেশিরভাগ স্থির করা উচিত, এড়ানো হবে না।
কেভিন

4
খুবই হতাশাজনক! এই উত্তরটি আপডেট রাখার জন্য ধন্যবাদ।
ড্যান লোয়েহের্জেজ

51

সুইফটে অবমূল্যায়নের সতর্কতাগুলিকে নিঃশব্দ করার জন্য কোনও সাধারণ নির্মাণ নেই, তবে এমন একটি কাজ রয়েছে যা অনেক ক্ষেত্রে প্রয়োগ করা যেতে পারে

ধরা যাক আপনার getLatestImage()ক্লাসে একটি পদ্ধতি রয়েছে Fooযা অবহেলা পদ্ধতি / ক্লাস ব্যবহার করে।

ব্যবহারের @availableড্যানিয়েল থর্প হিসাবে সব সতর্কবার্তা মুখ বন্ধ করার বর্ণিত ভিতরে পদ্ধতি:

@available(iOS, deprecated: 9.0)
func getLatestImage() -> UIImage? {
    ...
}

এখন আপনি হ্রাসের সতর্কতা ছাড়াই পদ্ধতিটি কল করতে চান getLatestImage()। আপনি প্রথমে একটি প্রোটোকল এবং একটি এক্সটেনশন সংজ্ঞায়িত করে তা অর্জন করতে পারেন:

private protocol GetLatestImage {
    func getLatestImage() -> UIImage?
}
extension Foo: GetLatestImage {}

এবং তারপরে অবচয় ছাড়াই সতর্কতা ছাড়াই পদ্ধতিটিকে কল করুন (যদি এর fooউদাহরণ হয় Foo):

(foo as GetLatestImage).getLatestImage() // no deprecation warning

ফলাফলটি হ'ল আপনার কাছে এমন সুইফট কোড রয়েছে যা কোনও হতাশার সতর্কতা ছাড়াই অবনমিত API ব্যবহার করে।


কত চালাক. দুষ্টের মত? :) তবে খুব ভাল। অ্যাড্রেস বুক ফ্রেমওয়ার্কের কিছু দিক যা চলমান ব্যবহারের উপর অবজ্ঞাতকে অব্যাহত ব্যবহারের বিষয়ে সতর্কতা দমন করার মতো সতর্কতা দমন করার মতো ব্যবহারের ক্ষেত্রে দুর্দান্ত, তবে একটি প্রতিস্থাপনটি আসলে এখনও প্রয়োজনীয় সমস্ত কার্যকারিতা সরবরাহ করে না। ধন্যবাদ
ডানকান ব্যাবেজ

4
যদি এটি কাজ করে তবে আমি আপনাকে আপনার প্রিয় পানীয়টির একটি ছয় প্যাক পাঠিয়ে দেব। আপনার অসামান্য মন স্যার, আপনাকে ধন্যবাদ।
জন

@ জন এই ধরনের শব্দগুলির জন্য ধন্যবাদ! এটি কাজ করে, আমাদের কোডবেজে ত্রুটি হিসাবে সতর্কতা হিসাবে বিবেচনা করার সাথে সাথে আমাকে এটিকে সামনে নিয়ে আসতে হয়েছিল, এবং একটি বিভাগ এখনও অবহেলিত লাইব্রেরি ব্যবহার করছে।
তম্মো ফ্রিজে

4
@ জন তাকে আপনি ছয় প্যাকটি পাঠিয়েছেন? : পি এটি দুর্দান্ত। প্রতিভা। ধন্যবাদ
বরণ এমরে

আপনি একটি খারাপ প্রতিভা।
ক্রিসট

41

প্রকৃতপক্ষে, আপনি এই সতর্কতাগুলিকে ঘেরযুক্ত যৌক্তিক কাঠামো (যেমন ফাংশন / প্রকার) ব্যবহার করে দমন করতে পারেন@available

উদাহরণস্বরূপ, বলুন আপনার কাছে এমন কিছু কোড রয়েছে যা ঠিকানাবুক ফ্রেমওয়ার্ক ব্যবহার করে তবে আপনি আইওএস 9 এর বিপরীতে বিল্ডিং করছেন।

@available(iOS, deprecated: 9.0)
func addressBookStatus() -> ABAuthorizationStatus {
    return ABAddressBookGetAuthorizationStatus()
}

Xcode 7.0.1 হিসাবে এটি ইনলাইন সতর্কতাগুলি প্রদর্শিত হতে বাধা দেবে।


6
হ্যাঁ, তবে আপনি যখন আপনার addressBookStatus()... কে অবহিত হিসাবে চিহ্নিত করেছেন তখন আপনি একই সতর্কতাটি দেখতে পাবেন ।
ভ্যালেন্টিন শেরগিন

4
প্রো টিপ: আপনি যদি পুরো ক্লাসের জন্য এটি নিঃশব্দ করতে চান তবে এই কুকুরছানাটিকে কেবল আপনার ক্লাসের বিবৃতি (উদাহরণ class ViewController: UIViewController:) এর উপরে চাপ দিন
সাইরেনস

4
@ সাইরেনস আপনি যখনই এই ক্লাসটি প্রতিবার কল করবেন তখনই আপনি এই সতর্কতাটি দেখতে পাবেন ☹️ (কমপক্ষে এক্সকোড ৮ দিয়ে)
আলেকজান্ডার ভ্যাসেনিন

এই ফিক্সটি দিয়ে কেউ কি অবহেলিত সমস্ত সতর্কতা নিঃশব্দ করতে সফল হয়েছে? আমি তাদের সংখ্যা কেবল একটিতে হ্রাস করতে সক্ষম হয়েছি , তবে শেষেরটি থেকে মুক্তি পাওয়ার কোনও উপায় আমি দেখতে পাচ্ছি না। কোনও পরামর্শ?
আলেকজান্ডার ভ্যাসেনিন

4
সুতরাং কিভাবে সাবধানবাণী নীরবতা এই ব্যবহার করব " 'CGFloat.NativeType' সম্পর্কহীন টাইপ (ওরফে 'ডাবল') 'ভাসমান' থেকে ঢালাই সবসময় ব্যর্থ হয়" যখন আমি একটি করছি if CGFloat(0).native is Float { … }? উত্তর: আপনি এই প্রশ্নের উত্তর না দেওয়ার কারণে আমি এটি ব্যবহার করি না।
স্লিপ ডি থম্পসন

1

আপাতত সুইফটে অবমূল্যায়ন সতর্কতাগুলিকে নিঃশব্দ করার উপায় নেই, তবে প্রযুক্তিগতভাবে আপনি শিরোনাম ফাইলটি সম্পাদনা করে একটি নির্দিষ্ট চিহ্নের জন্য এটি করতে পারেন।

  • অবচিত প্রতীক নামটি অনুলিপি করুন
  • নির্বাচন করুন File>Open Quickly
  • প্রতীকটি পেস্ট করুন এবং টিপুন Enter

    তাড়াতাড়ি ওপেন বাক্সে সুইফ্ট আইকনটি অক্ষম রয়েছে তা নিশ্চিত করুন

  • নির্বাচন করুন File>Show in Finder

  • প্রয়োজনে সম্পাদনার অনুমতি দেওয়ার জন্য ফাইলের অনুমতি পরিবর্তন করুন
  • প্রতীকটির জন্য অবচয় ম্যাক্রোগুলি সম্পাদনা করুন। রেফারেন্সের জন্য পার্শ্ববর্তী API গুলি দেখুন। যেমন প্রতিস্থাপন:

__OSX_AVAILABLE_BUT_DEPRECATED (__ MAC_10_6, __MAC_10_10, __IPHONE_3_0, __IPHONE_8_0)

সঙ্গে

__OSX_AVAILABLE_STARTING (__ MAC_10_6, __IPHONE_3_0)

এখন আরও একটি বিরক্তিকর সতর্কতা রয়েছে যার সম্পর্কে আপনি কিছু করতে পারবেন না।

আমি জানি, এটা নোংরা। তবে বর্তমান এসডিকে যদি কোনও প্রতিস্থাপন এপিআই উপলব্ধ না থাকে তবে এটি নিরাপদ হওয়া উচিত। এক্সকোডের নতুন সংস্করণটি প্রকাশিত হয়ে গেলে, পরিবর্তনটি ওভাররাইট হয়ে যাবে এবং আপনি আবার সতর্কতা দেখতে পাবেন। তারপরে আপনি হ্রাসপ্রাপ্ত API এখনও উপলব্ধ এবং কোনও প্রতিস্থাপন পান নি তা নিশ্চিত করতে আপনি নতুন এসডিকে এবং ওএস পরীক্ষা করতে পারেন।

আপনি যদি কোন ডাউনসাইড নিয়ে আসতে পারেন তবে মন্তব্য করুন।


সম্পদশক্তির জন্য উত্সাহ দেওয়া, তবে এটি আমার মুখে একটি নোংরা স্বাদ ছাড়বে: পি
ম্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.