abcdefg12345
ملصق أصلي- 10 يوليو 2013
- 21 أكتوبر 2017
سويفت 4
الكود:
if (Double(MyValue) > 10) { // value is bigger than 10 } else { // do something else }
أنا أستخدم سلسلة متغيرة لأنني أحتاجها لتكون سلسلة حتى أتمكن من تنسيقها لاحقًا ، لقد عرفتها على أنها
الكود:
var MyValue = ''
abcdefg12345
ملصق أصلي- 10 يوليو 2013
- 21 أكتوبر 2017
الكود:
let CheckValue = Double(MyValue)! if CheckValue > 10 { }
0002378
موقوف عن العمل
- 28 مايو 2017
- 23 أكتوبر 2017
وعلى الرغم من أن الاختيارات لها فوائدها ، إلا أنها تجعلني أيضًا أريد تحطيم جهاز الكمبيوتر الخاص بي ضد الحواف العلوية لحاوية القمامة.
ومع ذلك ، حيث يكمن موقع Swift حقًا في قسم الإغلاق ... أوه نعم! جافا بها أيضًا ، الآن ، لكن ...
وبالطبع ، حقيقة أن Swift أقل صرامة في إعلان الأنواع وتلك شبه النقطتين المزعجة ... رائع!
تفاعلات:abcdefg12345
0002378
موقوف عن العمل
- 28 مايو 2017
- 24 أكتوبر 2017
لست بحاجة إلى متغير جديد. يمكنك فقط إضافة '!' إلى Double (سلسلة) الخاصة بك ، وسوف تعمل.
أعتقد أنني كنت مخطئًا بشأن كون سويفت غبيًا في هذه الحالة. لكنني واجهت العديد من حالات شكاوى المترجم (غير قادر على مقارنة نوعين عدديين مختلفين).
غرين
- 15 يوليو 2015
- فورت وورث
- 24 أكتوبر 2017
أو يمكنك استخدام الربط الاختياري لإلغاء تغليف القيمة. سأجرب إحدى هذه الطرق أولاً قبل استخدام قوة فك
ابي ايدك 729
موقوف عن العمل
- 25 نوفمبر 2005
- 24 أكتوبر 2017
قال مفهوم maculate: أعتقد أن Swift ، كلغة ، مضحكة للغاية في بعض الأحيان ، خاصة. قادم من برمجة Java. وقد طرحت أحد أفضل الأمثلة على ذلك.هذا جاهل تماما. تكمن المشكلة في أن OP لا يعرف الميزة الأساسية لـ Swift ، وهي قيم اختيارية. من الواضح أن المنشئ Double (String) يمكن أن يفشل إذا كانت السلسلة لا تحتوي على رقم. لهذا السبب لا ينتج عن Double (String) ولا يمكن أن ينتج نتيجة من النوع Double ، ولكن نتيجة واحدة من النوع Double؟ ، هذه قيمة اختيارية مزدوجة. ولا يمكن مقارنة المضاعفة الاختيارية بـ Int.
'الحل' الخاص بك مروع حقًا. ال ! يعني 'أنا متأكد من أن هذا التحويل سينجح. إذا لم يحدث ذلك ، فالرجاء تعطل التطبيق. دع د = ضعف ('1234x')! سوف تحطم فقط. عمدا. لأنك لم تتحقق من عدم وجود شيء ، وكان لا شيء.
الطريقة الصحيحة هي التحقق من الخطأ. على سبيل المثال
إذا تركت d = Double (MyValue) ، d> 10 {
// احتوت MyValue على رقم ، والرقم> 10.
} آخر {
// لم تحتوي MyValue على رقم ، أو كان الرقم<= 10.
}
إذا كنت تعتقد أنه من المفيد كتابة رمز آمن ويعمل بالفعل ، فإن Swift هي اللغة الصحيحة.
0002378
موقوف عن العمل
- 28 مايو 2017
- 24 أكتوبر 2017
قال gnasher729: هذا جاهل تماما. تكمن المشكلة في أن OP لا يعرف الميزة الأساسية لـ Swift ، وهي قيم اختيارية. من الواضح أن المنشئ Double (String) يمكن أن يفشل إذا كانت السلسلة لا تحتوي على رقم. لهذا السبب لا ينتج عن Double (String) ولا يمكن أن ينتج نتيجة من النوع Double ، ولكن نتيجة واحدة من النوع Double؟ ، هذه قيمة اختيارية مزدوجة. ولا يمكن مقارنة المضاعفة الاختيارية بـ Int.
هل تعرضت للتنمر في المدرسة؟ يبدو أنك تعاني من تدني احترام الذات لأنك لا تستطيع الرد دون مهاجمتي.
سيكون هذا أول وآخر اتصال لي لك. اقتراح لك - حاول التواصل بطريقة أكثر حضارة ، وستكون الحياة رائعة. يعتني.
غرين
- 15 يوليو 2015
- فورت وورث
- 25 أكتوبر 2017
قال gnasher729: الطريقة الصحيحة هي التحقق من الخطأ. على سبيل المثال
إذا تركت d = Double (MyValue) ، d> 10 {
// احتوت MyValue على رقم ، والرقم> 10.
} آخر {
// لم تحتوي MyValue على رقم ، أو كان الرقم<= 10.
}
هذا غامض - ماذا لو كانت القيمة<= 10 should produce different results from the value being nil? To be fair, the OP's post is ambiguous as they were forcing the unwrap, meaning a nil value would crash. However in most business cases, a nil value would be handled differently (safely) from an insufficient value.
الطريقة الأنظف هي:
الكود:
// Handle your unwrapping here, and specify what to do in case of a nil guard let d = Double(MyValue) else { return } // Then implement your if statement if d > 10 { // Do what you want if d > 10 } else { // Do what you want if d <= 10 }
على الرغم من أنني أعتقد حقًا أنه يجب تخزين MyValue كمزدوج من البداية ، وتطبيق NumberFormatter لاحقًا للتعامل مع أي تنسيق مطلوب. هذا يحمل عبئًا إدراكيًا أقل بكثير لمن ينتهي بقراءة الكود.
ابي ايدك 729
موقوف عن العمل
- 25 نوفمبر 2005
- 26 أكتوبر 2017
قال التصور البقعي: هل تم التنمر عليك في المدرسة؟ يبدو أنك تعاني من تدني احترام الذات لأنك لا تستطيع الرد دون مهاجمتي.
سيكون هذا أول وآخر اتصال لي لك. اقتراح لك - حاول التواصل بطريقة أكثر حضارة ، وستكون الحياة رائعة. يعتني.
حسنًا ، أنا لم أهاجمك. لقد هاجمت منشورك ، والذي يوضح أنك تعرف القليل جدًا عن Swift ، وتضمنت توصية واحدة خطيرة للغاية. س
سايروس
إلى
- 21 أغسطس 2008
- 26 أكتوبر 2017
إدراج
- 14 أبريل 2018
- 14 أبريل 2018
1) '!' يمكنك الإشارة إلى أن هذه القيمة ستكون صحيحة int عن طريق إضافة العلامة.
الكود:
if (Double(MyValue)! > 10) { // }
2) يمكنك تحديد النوع عند تحديد القيمة. الكود:
let value: Int = Double(MyValue)! if (value > 10) { // }
إلى المؤسسات
- 28 يناير 2006
- 27 أبريل 2018
ynstek قال: سويفت ، غير متأكد من أن القيمة الخاصة بك صحيحة. هناك خياران للتأكد.
1) '!' يمكنك الإشارة إلى أن هذه القيمة ستكون صحيحة int عن طريق إضافة العلامة.
الكود:if (Double(MyValue)! > 10) { // }
2) يمكنك تحديد النوع عند تحديد القيمة.
الكود:let value: Int = Double(MyValue)! if (value > 10) { // }
أعتقد أن مثالك رقم 2 سيفشل لأنك تحاول تعيين سلسلة مصبوبة لمضاعفة إلى متغير Int. أيضًا ، أنت تفترض أن MyValue ليس صفريًا ، مما قد يتسبب في حدوث خطأ في وقت التشغيل إذا كان لا شيء أو غير رقمي.
شرح المثال رقم 1 الخاص بك ليس صحيحًا أيضًا. لا تقوم علامة التعجب بتحويل القيمة إلى عدد صحيح. يفك قيمة المتغير الاختياري. في المثال الخاص بك ، ستنتهي بقيمة مزدوجة ، وليس Int ، وفقط إذا لم تكن MyValue صفرية أو قيمة غير رقمية.
المشاركات الشعبية