ฟอรั่ม

ตัวดำเนินการไบนารีของ Mac '>' ไม่สามารถใช้กับตัวถูกดำเนินการประเภท 'Double?' และ 'อินท์'

abcdefg12345

โปสเตอร์ต้นฉบับ
10 ก.ค. 2556
  • 21 ต.ค. 2017
ฉันกำลังพยายามให้มีคำสั่ง if เพื่อตรวจสอบว่าค่าคู่ในสตริงมีขนาดใหญ่กว่า 10 แต่ฉันกระตือรือร้นที่จะได้รับข้อผิดพลาด 'ตัวดำเนินการไบนารี '>' ไม่สามารถใช้กับตัวถูกดำเนินการประเภท 'สองเท่า' และ 'Int'' ใครๆ ก็รู้ว่าฉันทำอะไรผิด

สวิฟ 4
รหัส: |_+_|
ฉันใช้สตริงตัวแปรเพราะฉันต้องการให้มันเป็นสตริงเพื่อที่ฉันจะได้จัดรูปแบบได้ในภายหลัง ฉันกำหนดให้มันเป็น
รหัส: |_+_|

abcdefg12345

โปสเตอร์ต้นฉบับ
10 ก.ค. 2556


  • 21 ต.ค. 2017
แก้ไขโดยการเพิ่มตัวแปรอื่น
รหัส: |_+_|
ปฏิกิริยา:960การออกแบบ

0002378

ถูกระงับ
28 พฤษภาคม 2017
  • 23 ต.ค. 2017
ฉันคิดว่าภาษา Swift นั้นค่อนข้างน่าหัวเราะในบางครั้ง มาจากการเขียนโปรแกรมจาวา และคุณได้ยกตัวอย่างที่ดีที่สุดเรื่องหนึ่งขึ้นมา

และในขณะที่ทางเลือกมีประโยชน์ แต่ก็ยังทำให้ฉันต้องการทุบคอมพิวเตอร์ของฉันกับขอบด้านบนของถังขยะ

อย่างไรก็ตาม ที่สวิฟท์ห่วยจริงๆ อยู่ในแผนกปิด ... โอ้ ใช่ ! Java มีพวกเขาด้วย แต่ ...

และแน่นอนว่า Swift เข้มงวดน้อยกว่าในการประกาศประเภทและเซมิโคลอนที่น่ารำคาญเหล่านั้น ... ยอดเยี่ยม !

ปฏิกิริยา:abcdefg12345

0002378

ถูกระงับ
28 พฤษภาคม 2017
  • 24 ต.ค. 2017
โอ้ เดี๋ยวก่อน ตอนที่ฉันมองย้อนกลับไปที่โค้ดของคุณ ฉันเห็นว่าค่า Double(string) ของคุณมีค่าเป็น Double? ซึ่งเป็นค่าทางเลือก

คุณไม่จำเป็นต้องมีตัวแปรใหม่ คุณสามารถเพิ่ม '!' ไปที่ Double(string) ของคุณและมันจะได้ผล

ฉันเดาว่าฉันคิดผิดที่ Swift โง่ในกรณีนี้ แต่ฉันได้พบหลายกรณีของการร้องเรียนคอมไพเลอร์ดังกล่าว (ไม่สามารถเปรียบเทียบตัวเลขสองประเภทที่แตกต่างกัน)

กรีน

15 ก.ค. 2558
ฟอร์ตเวิร์ธ
  • 24 ต.ค. 2017
ฉันคิดว่าวิธีแก้ปัญหาที่รวดเร็วกว่าและสะอาดกว่าคือการจัดเก็บ MyValue ของคุณเป็นสองเท่าหรือ int (ซึ่งดูเหมือนว่าจะเป็น) จากนั้นคุณสามารถใช้ NumberFormatter เพื่อจัดการการจัดรูปแบบ

หรือคุณสามารถใช้การผูกที่เป็นทางเลือกเพื่อแกะค่า ฉันจะลองวิธีใดวิธีหนึ่งเหล่านี้ก่อนใช้แรงแกะกล่อง

gnasher729

ถูกระงับ
25 พ.ย. 2548
  • 24 ต.ค. 2017
maculateConception กล่าวว่า: ฉันคิดว่า Swift ในฐานะภาษานั้นค่อนข้างน่าหัวเราะในบางครั้งโดยเฉพาะ มาจากการเขียนโปรแกรมจาวา และคุณได้ยกตัวอย่างตัวอย่างที่ดีที่สุดอย่างหนึ่งของสิ่งนั้น
นั่นค่อนข้างไร้สาระ ปัญหาคือ OP ไม่รู้เกี่ยวกับคุณสมบัติพื้นฐานของ Swift ซึ่งเป็นค่าทางเลือก คอนสตรัคเตอร์ Double(String) อาจล้มเหลวอย่างเห็นได้ชัดหาก String ไม่มีตัวเลข นั่นเป็นสาเหตุที่ Double (String) ไม่ได้และไม่สามารถสร้างผลลัพธ์ของประเภท Double แต่หนึ่งในประเภท Double? ซึ่งเป็นตัวเลือกเสริม และตัวเลือก Double นั้นไม่สามารถเปรียบเทียบกับ Int ได้

'วิธีแก้ปัญหา' ของคุณแย่มากจริงๆ NS ! หมายถึง 'ฉันแน่ใจว่าการแปลงนี้จะสำเร็จ หากไม่เป็นเช่นนั้น โปรดทำให้แอปขัดข้อง' ให้ d = สองเท่า ('1234x')! ก็จะพัง อย่างตั้งใจ เพราะคุณไม่ได้ตรวจหาศูนย์ และมันก็เป็นศูนย์

วิธีที่ถูกต้องคือการตรวจสอบข้อผิดพลาด ตัวอย่างเช่น

ถ้าให้ d = สองเท่า (MyValue), d > 10 {
// MyValue มีตัวเลข และตัวเลขคือ > 10
} อื่น {
// MyValue ไม่มีตัวเลขหรือตัวเลขเดิมคือ<= 10.
}

หากคุณคิดว่ามันคุ้มค่าที่จะเขียนโค้ดที่ปลอดภัยและใช้งานได้จริง Swift คือภาษาที่เหมาะสม
ปฏิกิริยา:atmenterprises และ ajthom90

0002378

ถูกระงับ
28 พฤษภาคม 2017
  • 24 ต.ค. 2017
gnasher729 กล่าวว่า: นั่นค่อนข้างจะไร้สาระ ปัญหาคือ OP ไม่รู้เกี่ยวกับคุณสมบัติพื้นฐานของ Swift ซึ่งเป็นค่าทางเลือก คอนสตรัคเตอร์ Double(String) อาจล้มเหลวอย่างเห็นได้ชัดหาก String ไม่มีตัวเลข นั่นเป็นสาเหตุที่ Double (String) ไม่ได้และไม่สามารถสร้างผลลัพธ์ของประเภท Double แต่หนึ่งในประเภท Double? ซึ่งเป็นตัวเลือกเสริม และตัวเลือก Double นั้นไม่สามารถเปรียบเทียบกับ Int ได้

คุณถูกรังแกที่โรงเรียนหรือไม่? คุณดูมีความนับถือตนเองค่อนข้างต่ำเพราะคุณไม่สามารถตอบสนองโดยไม่โจมตีฉัน

นี่จะเป็นการสื่อสารครั้งแรกและครั้งสุดท้ายของฉันกับคุณ คำแนะนำสำหรับคุณ - ลองสื่อสารอย่างสุภาพกว่านี้แล้วชีวิตจะดีมาก ดูแล.

กรีน

15 ก.ค. 2558
ฟอร์ตเวิร์ธ
  • 25 ต.ค. 2017
gnasher729 กล่าวว่า: วิธีที่ถูกต้องคือการตรวจสอบข้อผิดพลาด ตัวอย่างเช่น

ถ้าให้ d = สองเท่า (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 เป็น Double ตั้งแต่เริ่มต้น และ NumberFormatter นำมาใช้ในภายหลังเพื่อจัดการกับการจัดรูปแบบใดก็ตามที่จำเป็น นั่นเป็นภาระด้านความรู้ความเข้าใจที่ต่ำกว่ามากสำหรับผู้ที่อ่านโค้ด
ปฏิกิริยา:atmenterprises

gnasher729

ถูกระงับ
25 พ.ย. 2548
  • 26 ต.ค. 2017
maculateConception กล่าวว่า: คุณถูกรังแกที่โรงเรียนหรือไม่ คุณดูมีความนับถือตนเองค่อนข้างต่ำเพราะคุณไม่สามารถตอบสนองโดยไม่โจมตีฉัน

นี่จะเป็นการสื่อสารครั้งแรกและครั้งสุดท้ายของฉันกับคุณ คำแนะนำสำหรับคุณ - ลองสื่อสารอย่างสุภาพกว่านี้แล้วชีวิตจะดีมาก ดูแล.

ฉันไม่ได้โจมตีคุณ ฉันโจมตีโพสต์ของคุณ ซึ่งแสดงให้เห็นว่าคุณรู้จัก Swift น้อยมาก และรวมคำแนะนำที่อันตรายมากไว้ด้วย NS

ไซรัส

ถึง
21 ส.ค. 2551
  • 26 ต.ค. 2017
ฉันปกป้องส่วนใหญ่ แต่ถ้าแต่ละฟังก์ชั่นในคลาสปกป้องตัวแปรเดียวกัน...อาจต้องพิจารณาอินเทอร์เฟซเริ่มต้นของคุณใหม่

แทรก

14 เม.ย. 2018
  • 14 เม.ย. 2018
สวิฟต์ไม่แน่ใจว่าคุณค่าของคุณนั้นตรงกันทุกประการ มีสองตัวเลือกเพื่อให้แน่ใจว่า
1) '!' คุณสามารถระบุได้ว่าค่านี้จะเป็นค่าที่แน่นอนโดยการเพิ่มเครื่องหมาย
รหัส: |_+_| 2) คุณสามารถระบุประเภทเมื่อกำหนดค่า
รหัส: |_+_| ถึง

atmenterprises

28 ม.ค. 2549
  • 27 เม.ย. 2018
ynstek กล่าวว่า Swift ไม่แน่ใจว่าคุณค่าของคุณนั้นตรงกันทุกประการ มีสองตัวเลือกเพื่อให้แน่ใจว่า
1) '!' คุณสามารถระบุได้ว่าค่านี้จะเป็นค่าที่แน่นอนโดยการเพิ่มเครื่องหมาย
รหัส: |_+_| 2) คุณสามารถระบุประเภทเมื่อกำหนดค่า
รหัส: |_+_|

ฉันคิดว่าตัวอย่าง # 2 ของคุณจะล้มเหลวเพราะคุณกำลังพยายามกำหนดสตริงที่ส่งเป็นสองเท่าให้กับตัวแปร Int นอกจากนี้ คุณกำลังถือว่า MyValue ไม่เป็นศูนย์ ซึ่งอาจทำให้เกิดข้อผิดพลาดรันไทม์ได้หากเป็นศูนย์หรือไม่ใช่ตัวเลข

คำอธิบายตัวอย่าง #1 ของคุณก็ไม่ถูกต้องเช่นกัน เครื่องหมายอัศเจรีย์ไม่ได้แปลงค่าเป็น Int มันแกะค่าของตัวแปรทางเลือก ในตัวอย่างของคุณ คุณจะลงเอยด้วยค่า Double ไม่ใช่ Int และเฉพาะในกรณีที่ MyValue ไม่เป็นศูนย์หรือค่าที่ไม่ใช่ตัวเลข