আপনার গণনা করার চেষ্টাটি elapsedTime
ভুল। সুইফ্ট 3-তে, এটি হবে:
let elapsed = Date().timeIntervalSince(timeAtPress)
উল্লেখ্য ()
পর Date
রেফারেন্স। Date()
নতুন তারিখ বস্তুর instantiates, এবং তারপর timeIntervalSince
যে মধ্যে সময় পার্থক্য ফেরৎ timeAtPress
। এটি একটি ভাসমান পয়েন্ট মান (প্রযুক্তিগতভাবে, ক TimeInterval
) প্রদান করবে।
যদি আপনি এটি কোনও Int
মান হিসাবে কাটা হিসাবে চান , আপনি কেবল ব্যবহার করতে পারেন:
let duration = Int(elapsed)
এবং, বিটিডাব্লু, আপনার চলকটির সংজ্ঞাটি timeAtPress
কোনও Date
বস্তুর তাত্ক্ষণিক প্রয়োজন হয় না । আমি মনে করি আপনি উদ্দেশ্য:
var timeAtPress: Date!
এটি ভেরিয়েবলকে একটি ভেরিয়েবল হিসাবে ব্যাখ্যা করে Date
(একটি অন্তর্ভুক্তভাবে আবদ্ধ করা হয়), তবে আপনি সম্ভবত পরিবর্তনশীল না pressed
বলা পর্যন্ত সেই পরিবর্তনশীলটির প্রকৃত তাত্পর্যকে মুলতবি করতে চাইবেন ।
বিকল্পভাবে, আমি প্রায়শই ব্যবহার করি CFAbsoluteTimeGetCurrent()
, যেমন,
var start: CFAbsoluteTime!
এবং যখন আমি সেট করতে চাই startTime
, আমি নিম্নলিখিতগুলি করি:
start = CFAbsoluteTimeGetCurrent()
এবং যখন আমি অতিবাহিত সেকেন্ডের সংখ্যা গণনা করতে চাই, আমি নিম্নলিখিতটি করি:
let elapsed = CFAbsoluteTimeGetCurrent() - start
এটি লক্ষণীয় যে CFAbsoluteTimeGetCurrent
ডকুমেন্টেশন আমাদের সতর্ক করে:
এই ক্রিয়াকলাপে বারবার কলগুলি একঘেয়ে বৃদ্ধির ফলাফলের গ্যারান্টি দেয় না। বাহ্যিক সময়ের রেফারেন্সগুলির সাথে সুসংগত হওয়ার কারণে বা ঘড়ির সুস্পষ্ট ব্যবহারকারী পরিবর্তনের কারণে সিস্টেমের সময় হ্রাস পেতে পারে।
এর অর্থ হ'ল আপনি যদি দুর্ভাগ্যক্রমে সময় কাটাতে যথেষ্ট সময় ব্যয় করেন যখন এইগুলির মধ্যে একটি সমন্বয় ঘটে তবে আপনি ভুল সময় ব্যয় গণনা সহ শেষ করতে পারেন। এটি NSDate
/ Date
গণনার ক্ষেত্রেও সত্য । mach_absolute_time
ভিত্তিক গণনা ব্যবহার করা সবচেয়ে নিরাপদ (সবচেয়ে সহজেই সম্পন্ন করা হয় CACurrentMediaTime
):
let start = CACurrentMediaTime()
এবং
let elapsed = CACurrentMediaTime() - start
এটি ব্যবহার করে mach_absolute_time
, তবে প্রযুক্তিগত প্রশ্নোত্তর প্রশ্নোত্তর QA1398 এ বর্ণিত কিছু জটিলতা এড়িয়ে চলে ।
মনে রাখবেন, ডিভাইসটি পুনরায় বুট করার সময় সেই CACurrentMediaTime
/ mach_absolute_time
পুনরায় সেট করা হবে। সুতরাং, বটম লাইন, যদি আপনি সঠিক ব্যায়িত সময় গণনার প্রয়োজন একটি অ্যাপ্লিকেশন ব্যবহার চলছে সময়, CACurrentMediaTime
। তবে আপনি যদি ভবিষ্যতের কোনও তারিখে অ্যাপ্লিকেশনটি পুনরায় চালু করার সময় স্মরণ করতে পারে এমন অবিচ্ছিন্ন স্টোরেজে এই শুরুর সময়টি সংরক্ষণ করতে চলেছেন তবে আপনাকে ব্যবহার করতে হবে Date
বা CFAbsoluteTimeGetCurrent
, এবং কেবল কোনও প্রকারের ভুল হতে পারে live