פורומים

לא ניתן להחיל את האופרטור הבינארי '>' של Mac על אופרנדים מסוג 'כפול?' ו-'Int'

abcdefg12345

פוסטר מקורי
10 ביולי 2013
  • 21 באוקטובר 2017
אני מנסה לקבל משפט if כדי לבדוק אם ערך כפול במחרוזת גדול מ-10 אבל אני מעוניין לקבל שגיאה 'אופרטור בינארי '>' לא ניתן להחיל על אופרנדים מסוג 'כפול?' ו-'Int'' מישהו יודע מה אני עושה לא בסדר.

מהיר 4
קוד: |_+_|
אני משתמש במחרוזת משתנה כי אני צריך שהיא תהיה מחרוזת כדי שאוכל לעצב אותה מאוחר יותר, הגדרתי אותה בתור
קוד: |_+_|

abcdefg12345

פוסטר מקורי
10 ביולי 2013


  • 21 באוקטובר 2017
תיקן את זה על ידי הוספת משתנה נוסף
קוד: |_+_|
תגובות:עיצוב 960

0002378

מוּשׁהֶה
28 במאי 2017
  • 23 באוקטובר 2017
אני חושב שסוויפט, כשפה, די מצחיק לפעמים, במיוחד. מגיע מתכנות Java. והבאת את אחת הדוגמאות הטובות ביותר לכך.

ובעוד לאופציות יש את היתרונות שלהם, הם גם גורמים לי לרצות לרסק את המחשב שלי בקצוות העליונים של פח אשפה.

עם זאת, המקום בו סוויפט באמת בועט הוא במחלקת הסגירות... אה כן! גם לג'אווה יש אותם, עכשיו, אבל...

וכמובן, העובדה שסוויפט פחות מחמירה בהכרזת הטיפוסים והנקודה-פסיק המציקים האלה... מדהים!

תגובות:abcdefg12345

0002378

מוּשׁהֶה
28 במאי 2017
  • 24 באוקטובר 2017
אה רגע, עכשיו כשאני מסתכל אחורה על הקוד שלך, אני רואה שהערך הכפול (מחרוזת) שלך מוערך ככפול?, שהוא ערך אופציונלי.

אתה לא צריך משתנה חדש. אתה יכול פשוט להוסיף '!' ל(מחרוזת) הכפולה שלך, וזה יעבוד.

אני מניח שטעיתי לגבי שסוויפט טיפש במקרה הזה. אבל, נתקלתי במקרים רבים של תלונות מהדר כאלה (אי אפשר להשוות בין שני סוגים מספריים שונים).

גרין

15 ביולי 2015
פורט וורת'
  • 24 באוקטובר 2017
אני חושב שפתרון נקי יותר וסוויפטי יותר יהיה לאחסן את MyValue שלך ​​ככפול או אינט (מה שנראה שכן). לאחר מכן תוכל להשתמש ב- NumberFormatter כדי לטפל בעיצוב.

לחלופין, תוכל להשתמש בכריכה אופציונלית כדי לפרוק את הערך. הייתי מנסה קודם כל אחת מהשיטות האלה לפני השימוש בכוח פתיחה

gnasher729

מוּשׁהֶה
25 בנובמבר, 2005
  • 24 באוקטובר 2017
maculateConception אמר: אני חושב שסוויפט, כשפה, די מצחיק לפעמים, במיוחד. מגיע מתכנות Java. והבאת את אחת הדוגמאות הטובות ביותר לכך.
זה די חסר מושג. הבעיה היא שה-OP לא יודע על תכונה בסיסית של Swift, שהיא ערכים אופציונליים. הבנאי Double(String) יכול כמובן להיכשל אם המחרוזת אינה מכילה מספר. זו הסיבה ש-Double (מחרוזת) לא מייצרת ולא יכולה לייצר תוצאה מסוג Double, אלא אחת מסוג Double? , זה כפול אופציונלי. ואי אפשר להשוות Double אופציונלי עם Int.

ה'פתרון' שלך ממש ממש נורא. ה ! פירושו 'אני בטוח שההמרה הזו תצליח. אם לא, נא לקרוס את האפליקציה'. תן d = כפול ('1234x')! פשוט יקרוס. בְּמֵזִיד. כי לא בדקת אפס, וזה היה אפס.

הדרך הנכונה היא לבדוק את השגיאה. לדוגמה

if let d = Double (MyValue), d > 10 {
// MyValue הכיל מספר, והמספר הוא > 10.
} אחר {
// MyValue לא הכיל מספר, או שהמספר היה<= 10.
}

אם אתם חושבים שכדאי לכתוב קוד בטוח ובאמת עובד, אז Swift היא השפה הנכונה.
תגובות:atmenterprises ו-ajthom90

0002378

מוּשׁהֶה
28 במאי 2017
  • 24 באוקטובר 2017
gnasher729 אמר: זה די חסר מושג. הבעיה היא שה-OP לא יודע על תכונה בסיסית של Swift, שהיא ערכים אופציונליים. הבנאי Double(String) יכול כמובן להיכשל אם המחרוזת אינה מכילה מספר. זו הסיבה ש-Double (מחרוזת) לא מייצרת ולא יכולה לייצר תוצאה מסוג Double, אלא אחת מסוג Double? , זה כפול אופציונלי. ואי אפשר להשוות Double אופציונלי ל-Int.

הציקו לך בבית הספר? נראה שיש לך דימוי עצמי נמוך כי לא יכולת להגיב בלי לתקוף אותי.

זו תהיה התקשורת הראשונה והאחרונה שלי אליך. הצעה אליך - נסו לתקשר בצורה אזרחית יותר, והחיים יהיו נהדרים. שמור על עצמך.

גרין

15 ביולי 2015
פורט וורת'
  • 25 באוקטובר 2017
gnasher729 אמר: הדרך הנכונה היא בדיקת השגיאה. לדוגמה

if let 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.

דרך הרבה יותר נקייה תהיה:

קוד: |_+_|
אם כי, אני באמת חושב שצריך לאחסן את MyValue ככפול מההתחלה, ו- NumberFormatter ליישם מאוחר יותר כדי לטפל בכל העיצוב הדרוש. יש לזה נטל קוגניטיבי נמוך בהרבה עבור מי שבסופו של דבר קורא את הקוד.
תגובות:מפעלים

gnasher729

מוּשׁהֶה
25 בנובמבר, 2005
  • 26 באוקטובר 2017
maculateConception אמרה: האם הציקו לך בבית הספר? נראה שיש לך דימוי עצמי נמוך כי לא יכולת להגיב בלי לתקוף אותי.

זו תהיה התקשורת הראשונה והאחרונה שלי אליך. הצעה אליך - נסו לתקשר בצורה אזרחית יותר, והחיים יהיו נהדרים. שמור על עצמך.

ובכן, לא תקפתי אותך. תקפתי את הפוסט שלך, שממחיש שאתה יודע מעט מאוד על סוויפט, וכלל המלצה אחת מאוד מסוכנת. ס

SAIRUS

ל
21 באוגוסט, 2008
  • 26 באוקטובר 2017
אני שומר רוב הפעמים אבל אם כל אחת מהפונקציות בכיתה שומרת על אותו משתנה... אולי כדאי לשקול מחדש את הממשק הראשוני שלך.

לְהַכנִיס

14 באפריל, 2018
  • 14 באפריל, 2018
סוויפט, לא בטוח שהערך שלך הוא בדיוק int. יש שתי אפשרויות לוודא.
1) '!' אתה יכול לציין שערך זה יהיה מדויק int על ידי הוספת הסימן.
קוד: |_+_| 2) ניתן לציין את הסוג בעת הגדרת הערך.
קוד: |_+_| ל

מפעלים

28 בינואר 2006
  • 27 באפריל, 2018
ynstek אמר: סוויפט, לא בטוח שהערך שלך הוא בדיוק int. יש שתי אפשרויות לוודא.
1) '!' אתה יכול לציין שערך זה יהיה מדויק int על ידי הוספת הסימן.
קוד: |_+_| 2) ניתן לציין את הסוג בעת הגדרת הערך.
קוד: |_+_|

אני חושב שהדוגמה מספר 2 שלך תיכשל כי אתה מנסה להקצות cast מחרוזת למשתנה כפול ל-Int. כמו כן, אתה מניח ש-MyValue אינו אפס, מה שעלול לגרום לשגיאת זמן ריצה אם הוא יהיה אפס או לא מספרי.

גם ההסבר לדוגמא מספר 1 שלך לא נכון. סימן קריאה אינו ממיר ערך ל-Int. זה פותח את הערך של משתנה אופציונלי. בדוגמה שלך, תקבל ערך Double, לא Int, ורק אם MyValue לא היה אפס או ערך לא מספרי.