คำถามติดแท็ก swift4

ใช้แท็กนี้สำหรับคำถามที่เกี่ยวข้องโดยตรงกับการเปลี่ยนแปลงในภาษาโปรแกรม Swift ของ Apple เวอร์ชัน 4 เท่านั้น ใช้แท็ก [รวดเร็ว] สำหรับคำถามภาษาทั่วไปหรือแท็ก [ios], [โกโก้], [apple-watch] เป็นต้นสำหรับคำถามเกี่ยวกับการพัฒนาบนแพลตฟอร์ม Apple

12
การใช้การอนุมาน Swift 3 @objc ในโหมด Swift 4 ถูกคัดค้านหรือไม่?
สั้น ๆ ในขณะที่ใช้ Xcode 9 Beta ฉันพบว่ามีคำเตือนดังต่อไปนี้: การใช้การอนุมาน Swift 3 @objc ในโหมด Swift 4 เลิกใช้แล้ว โปรดระบุที่อยู่ที่คำเตือนการอนุมาน @objc ที่เลิกใช้แล้วทดสอบรหัสของคุณด้วยการเปิดใช้งานการบันทึก“ ใช้การอนุมาน Swift 3 @objc” ที่คัดค้านแล้วและปิดใช้งานการอนุมาน Swift 3 @objc ** หลังจากการวิจัยบางอย่างฉันยังไม่รู้ว่าจะแก้ไขปัญหานี้อย่างไร ฉันขอขอบคุณเคล็ดลับอย่างมากเกี่ยวกับวิธีการแก้ไขปัญหานี้รวมถึงคำอธิบายว่าเกิดอะไรขึ้น เป้าหมายของฉันคือเข้าใจความเข้าใจที่ดีขึ้นว่าเกิดอะไรขึ้นกับรหัสของฉัน

13
ฉันจะเขียน dispatch_after GCD ใน Swift 3, 4 และ 5 ได้อย่างไร
ใน Swift 2 ฉันสามารถใช้dispatch_afterเพื่อหน่วงเวลาการดำเนินการโดยใช้การส่งศูนย์กลางใหญ่: var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))) dispatch_after(dispatchTime, dispatch_get_main_queue(), { // your function here }) แต่ตอนนี้ดูเหมือนว่าจะไม่รวบรวมอีกต่อไปตั้งแต่ Swift 3 วิธีที่ดีที่สุดในการเขียนสิ่งนี้ใน Swift ยุคใหม่คืออะไร?

18
ฉันจะใช้สตริงตัวแบ่งการแบ่งใน Swift 4 ได้อย่างไร
ฉันมีรหัสง่ายๆต่อไปนี้เขียนใน Swift 3: let str = "Hello, playground" let index = str.index(of: ",")! let newStr = str.substring(to: index) จาก Xcode 9 beta 5 ฉันได้รับคำเตือนต่อไปนี้: ' substring(to:)' ไม่ได้รับการสนับสนุน: โปรดใช้ตัวStringห้อยการแบ่งส่วนที่มีตัวดำเนินการ 'บางส่วนจาก' ตัวแบ่งการแบ่งส่วนนี้สามารถใช้ช่วงใน Swift 4 ได้อย่างไร
294 swift  swift4 

7
คำเตือน: 'ตัวอักษร' ถูกคัดค้าน: โปรดใช้สตริงหรือซับสตริงโดยตรง
อักขระ - คุณสมบัติอินสแตนซ์ของ String ถูกคัดค้านด้วยXcode 9.1 มันเป็นประโยชน์มากที่จะได้รับจากการย่อย String โดยใช้charactersคุณสมบัติ แต่ตอนนี้มันได้รับการคัดค้านและ Xcode substringแนะนำให้ใช้ ฉันได้ลองตรวจสอบคำถามและคำแนะนำสำหรับนักพัฒนา Apple สำหรับแนวทางเดียวกัน แต่ไม่เห็นวิธีแก้ปัญหา / ทางเลือกตามที่แนะนำ นี่คือข้อความเตือน: 'characters' ไม่ได้รับการสนับสนุน: โปรดใช้สตริงหรือสตริงย่อย ฉันได้ดำเนินงานสตริงจำนวนมากดังนั้นจะดำเนินการ / charactersการจัดการใช้ทรัพย์สิน ใครมีความคิด / ข้อมูลเกี่ยวกับการอัปเดตนี้บ้าง

5
ฉันจะจัดการกับการเลิกใช้การอนุมาน @objc ด้วย #selector () ใน Swift 4 ได้อย่างไร
ฉันกำลังพยายามแปลงซอร์สโค้ดของโปรเจ็กต์จาก Swift 3 เป็น Swift 4 คำเตือน Xcode หนึ่งคำเตือนที่ให้ฉันเป็นเรื่องเกี่ยวกับตัวเลือกของฉัน ตัวอย่างเช่นฉันเพิ่มเป้าหมายลงในปุ่มโดยใช้ตัวเลือกปกติดังนี้: button.addTarget(self, action: #selector(self.myAction), for: .touchUpInside) นี่คือคำเตือนที่แสดง: อาร์กิวเมนต์ของ '#selector' หมายถึงวิธีอินสแตนซ์ 'myAction ()' ใน 'ViewController' ที่ขึ้นอยู่กับการอนุมานแอตทริบิวต์ '@objc' ที่เลิกใช้งานใน Swift 4 เพิ่ม '@objc' เพื่อแสดงวิธีการอินสแตนซ์นี้กับ Objective-C ตอนนี้การกดปุ่มFixข้อความแสดงข้อผิดพลาดทำกับฟังก์ชันของฉัน: // before func myAction() { /* ... */ } // after @objc func myAction() { /* ... …
131 swift  xcode  swift4 

13
อาร์เรย์ถอดรหัส Swift JSONDecode ล้มเหลวหากการถอดรหัสองค์ประกอบเดียวล้มเหลว
ในขณะที่ใช้โปรโตคอล Swift4 และ Codable ฉันพบปัญหาต่อไปนี้ - ดูเหมือนว่าจะไม่มีทางอนุญาตให้JSONDecoderข้ามองค์ประกอบในอาร์เรย์ได้ ตัวอย่างเช่นฉันมี JSON ต่อไปนี้: [ { "name": "Banana", "points": 200, "description": "A banana grown in Ecuador." }, { "name": "Orange" } ] และโครงสร้างCodable : struct GroceryProduct: Codable { var name: String var points: Int var description: String? } เมื่อถอดรหัส json let decoder = JSONDecoder() …
117 arrays  json  swift  swift4  codable 

7
ด้วย JSONDecoder ใน Swift 4 คีย์ที่หายไปสามารถใช้ค่าเริ่มต้นแทนที่จะต้องเป็นคุณสมบัติเสริมได้หรือไม่
Swift 4 เพิ่มCodableโปรโตคอลใหม่ เมื่อฉันใช้JSONDecoderดูเหมือนว่าต้องการให้คุณสมบัติที่ไม่ใช่ทางเลือกทั้งหมดของCodableคลาสของฉันมีคีย์ใน JSON มิฉะนั้นจะเกิดข้อผิดพลาด การทำให้ทุกคุณสมบัติของคลาสของฉันเป็นทางเลือกดูเหมือนจะเป็นเรื่องยุ่งยากโดยไม่จำเป็นเนื่องจากสิ่งที่ฉันต้องการจริงๆคือการใช้ค่าใน json หรือค่าเริ่มต้น (ฉันไม่ต้องการให้คุณสมบัติเป็นศูนย์) มีวิธีทำไหม? class MyCodable: Codable { var name: String = "Default Appleseed" } func load(input: String) { do { if let data = input.data(using: .utf8) { let result = try JSONDecoder().decode(MyCodable.self, from: data) print("name: \(result.name)") } } catch { print("error: \(error)") …
114 json  swift  swift4  codable 

13
วิธีถอดรหัสคุณสมบัติด้วยประเภทของพจนานุกรม JSON ในโปรโตคอลที่ถอดรหัสได้ Swift [45]
สมมติว่าฉันมีCustomerประเภทข้อมูลที่มีmetadataคุณสมบัติที่สามารถมีพจนานุกรม JSON ในออบเจ็กต์ของลูกค้าได้ struct Customer { let id: String let email: String let metadata: [String: Any] } { "object": "customer", "id": "4yq6txdpfadhbaqnwp3", "email": "john.doe@example.com", "metadata": { "link_id": "linked-id", "buy_count": 4 } } metadataคุณสมบัติสามารถใด ๆ โดยพล JSON แผนที่วัตถุ ก่อนที่ฉันจะสามารถแคสต์คุณสมบัติจาก JSON ที่ไม่กำหนดค่าซีเรียลจากNSJSONDeserializationแต่ด้วยDecodableโปรโตคอลSwift 4 ใหม่ฉันยังไม่สามารถคิดวิธีที่จะทำเช่นนั้นได้ มีใครรู้วิธีที่จะบรรลุสิ่งนี้ใน Swift 4 พร้อมโปรโตคอล Decodable หรือไม่?
114 json  swift  swift4  codable 

17
ฉันจะใช้ Swift's Codable เพื่อเข้ารหัสลงในพจนานุกรมได้อย่างไร
ฉันมีโครงสร้างที่ดำเนิน Swift Codable4 มีวิธีง่ายๆในการเข้ารหัสโครงสร้างนั้นในพจนานุกรมหรือไม่? let struct = Foo(a: 1, b: 2) let dict = something(struct) // now dict is ["a": 1, "b": 2]
110 swift  swift4  codable 

4
ฉันจะใช้คีย์แบบกำหนดเองกับโปรโตคอลถอดรหัสได้ของ Swift 4 ได้อย่างไร
Swift 4 เปิดตัวรองรับการเข้ารหัสและถอดรหัส JSON แบบเนทีฟผ่านDecodableโปรโตคอล ฉันจะใช้คีย์ที่กำหนดเองสำหรับสิ่งนี้ได้อย่างไร เช่นบอกว่าฉันมีโครงสร้าง struct Address:Codable { var street:String var zip:String var city:String var state:String } ฉันสามารถเข้ารหัสสิ่งนี้เป็น JSON let address = Address(street: "Apple Bay Street", zip: "94608", city: "Emeryville", state: "California") if let encoded = try? encoder.encode(address) { if let json = String(data: encoded, encoding: .utf8) { …
105 json  swift  swift4  codable 

12
แถบนำทางแถบด้านขวาข้อผิดพลาดปุ่มรูปภาพ iOS 11
รหัสนี้ใช้ได้ใน ios10 ฉันได้รับป้ายกำกับและปุ่มรูปภาพซึ่งเป็นโปรไฟล์รูปผู้ใช้วงกลมกลม .. โอเค แต่เมื่อเรียกใช้โปรแกรมจำลอง xcode 9 ios11 ฉันได้รับมันออกมา กรอบปุ่มจะต้องเป็น 32x32 เมื่อตรวจสอบซิมและรับมุมมองและบอก xcode เพื่ออธิบายมุมมองที่ฉันได้รับเอาต์พุตเป็น 170x32 หรือประมาณนั้น นี่คือรหัสของฉัน let labelbutton = UIButton( type: .system) labelbutton.addTarget(self, action:#selector(self.toLogin(_:)), for: .touchUpInside) labelbutton.setTitleColor(UIColor.white, for: .normal) labelbutton.contentHorizontalAlignment = .right labelbutton.titleLabel?.font = UIFont.systemFont(ofSize: 18.00) let button = UIButton(type: .custom) button.addTarget(self, action:#selector(self.toLogin(_:)), for: .touchUpInside) button.frame = CGRect(x: …
101 ios  swift  ios11  xcode9-beta  swift4 

6
จะถอดรหัสโครงสร้าง JSON ที่ซ้อนกันด้วยโปรโตคอล Swift Decodable ได้อย่างไร
นี่คือ JSON ของฉัน { "id": 1, "user": { "user_name": "Tester", "real_info": { "full_name":"Jon Doe" } }, "reviews_count": [ { "count": 4 } ] } นี่คือโครงสร้างที่ฉันต้องการบันทึกไว้ (ไม่สมบูรณ์) struct ServerResponse: Decodable { var id: String var username: String var fullName: String var reviewCount: Int enum CodingKeys: String, CodingKey { case id, // …
94 json  swift  swift4  codable 

8
ไม่สามารถนำเข้าโมดูลที่คอมไพล์ด้วย Swift 4.0 ใน Swift 4.0.1
อย่างไรก็ตามฉันได้คอมไพล์กรอบงานใหม่โดยใช้ Xcode เดียวกันและยังคงให้ข้อผิดพลาดนี้แก่ฉัน Base SDK iOS 11.1 สำหรับทั้งคู่ เวอร์ชันภาษา Swift Swift 4.0 สำหรับทั้งคู่ ไม่ใช้ Pods / Carthage ฉันหวังว่าจะมีคนรู้
92 ios  swift  xcode  xcode9  swift4 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.