اثنا عشر سؤالًا تغطي الدورة كلها. احصل على 70% أو أكثر لتنجح وتفتح شهادتك. يمكنك إعادته متى شئت.
أنهِ كل الدروس لتحصل على الشهادة، ويمكنك خوض الاختبار في أي وقت.
السؤال 1 من 12
expenses مصفوفة فارغة. ما قيمة label؟
expenses
label
let label = expenses.first?.title.uppercased() ?? "NONE"
nil
"NONE"
السؤال 2 من 12
يحتاج Pocket Budget إلى إعداد لترتيب الفرز فيه ثلاثة خيارات بالضبط (الأحدث، الأقدم، الأكبر)، يُعرض في منتقٍ ويُحفظ على القرص. أيّ نوع هو الأنسب؟
enum SortOrder: String, CaseIterable { case newest, oldest, largest }
let sortOrder: String
struct SortOrder { var isNewest: Bool; var isLargest: Bool }
class SortOrder
السؤال 3 من 12
لماذا يحتفظ نموذج إضافة المصروف بـ title وamount وcategory في خصائص @State خاصة به بدل الكتابة في المخزن مع كل ضغطة مفتاح؟
title
amount
category
@State
@Observable
TextField
Expense
السؤال 4 من 12
أضفت case gifts إلى Category. في المشروع ثلاث جمل switch على Category، ومع ذلك تنجح الترجمة دون أخطاء. ما التفسير الأرجح؟
case gifts
Category
switch
default:
السؤال 5 من 12
عدة مهام تجلب الأسعار بالتوازي ويجب أن تحدّث كلها cache مشتركًا واحدًا. أيّ تعريف يُبقي الـ cache خاليًا من سباقات البيانات؟
actor RateCache { private var rates: [String: Decimal] = [:] }
final class RateCache { var rates: [String: Decimal] = [:] }
struct RateCache { var rates: [String: Decimal] }
var rates: [String: Decimal]
السؤال 6 من 12
يحتوي الـ JSON على "total_spent": 12.5 وفي الـ struct الخاص بك let totalSpent: Decimal. يرمي فكّ الترميز keyNotFound. ما أنظف إصلاح؟
"total_spent": 12.5
let totalSpent: Decimal
keyNotFound
total_spent
Double
decoder.keyDecodingStrategy = .convertFromSnakeCase
السؤال 7 من 12
يريد المستخدمون السحب للأسفل على قائمة الأسعار لتحديثها. أيّ modifier يضيف ذلك؟
.task { await model.load() }
.refreshable { await model.load() }
.onTapGesture { Task { await model.load() } }
.sheet(isPresented:)
السؤال 8 من 12
في أيّ موقف تكون try? خيارًا جيدًا؟
try?
السؤال 9 من 12
أيّ تعريف يعرض المصاريف المحفوظة الأحدث أولًا ويتحدّث من تلقاء نفسه حين تضيف شاشة أخرى مصروفًا؟
@State private var expenses: [Expense] = []
let expenses = try? context.fetch(FetchDescriptor<Expense>())
@Environment(\.modelContext) private var expenses
@Query(sort: \Expense.date, order: .reverse) private var expenses: [Expense]
السؤال 10 من 12
ماذا يَعِد some View في var body: some View؟
some View
var body: some View
body
View
السؤال 11 من 12
يفشل رفع نسخة جديدة إلى App Store Connect لأن رقم الـ Build ذاك استُخدم من قبل لهذا الإصدار. ماذا تفعل؟
السؤال 12 من 12
هل يُترجَم هذا الكود؟
@Observable final class Settings { var limit: Decimal = 100 } let settings = Settings() settings.limit = 200
settings
let
var
12 سؤالًا بلا إجابة