Questions tagged «swift4»

仅对与Apple的Swift编程语言的版本4的更改直接相关的问题使用此标记。使用标签[swift]来解决更常见的语言问题,或使用标签[ios],[cocoa],[apple-watch]等来解决有关在Apple平台上开发的问题。

12
不建议在Swift 4模式下使用Swift 3 @objc推论吗?
简要地说,在使用Xcode 9 Beta时,我遇到了以下警告: 不建议在Swift 4模式下使用Swift 3 @objc推断。请解决已弃用的@objc推断警告,启用“使用已弃用的Swift 3 @objc推断”日志记录来测试您的代码,并禁用Swift 3 @objc推断。** 经过研究后,我仍然不知道如何解决该问题。我将不胜感激有关如何解决此问题的所有技巧以及对所发生情况的解释。 我的目标是更好地理解我的代码正在发生的事情。

13
如何在Swift 3、4和5中编写GCD中的dispatch_after?
在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中使用String切片下标?
我有以下用Swift 3编写的简单代码: let str = "Hello, playground" let index = str.index(of: ",")! let newStr = str.substring(to: index) 从Xcode 9 beta 5,我收到以下警告: substring(to:)不推荐使用“ ”:请String对带有“ partial range from”运算符的下标进行切片。 如何在Swift 4中使用部分范围的切片下标?
294 swift  swift4 

7
警告:不建议使用“字符”:请直接使用字符串或子字符串
字符-Xcode 9.1不推荐使用String的实例属性 使用characters属性从String中获取子字符串非常有用,但现在已不建议使用,Xcode建议使用substring。我尝试检查SO问题和Apple开发人员教程/指南是否相同。但是看不到建议的任何解决方案/替代方案。 这是警告消息: 不推荐使用“字符”:请使用字符串或子字符串 我有很多使用property执行/处理的字符串操作characters。 有人对此更新有任何想法/信息吗?

5
在Swift 4中,如何使用#selector()处理@objc推理弃用?
我正在尝试将项目的源代码从Swift 3转换为Swift4。Xcode给我的一个警告是关于选择器的信息。 例如,我使用常规选择器将目标添加到按钮,如下所示: button.addTarget(self, action: #selector(self.myAction), for: .touchUpInside) 这是显示的警告: “ #selector”的参数引用“ ViewController”中的实例方法“ myAction()”,该方法依赖于Swift 4中弃用的“ @objc”属性推断 添加“ @objc”以将该实例方法公开给Objective-C 现在,点击Fix错误消息会对我的功能执行此操作: // before func myAction() { /* ... */ } // after @objc func myAction() { /* ... */ } 我真的不想重命名所有功能以包括该@objc标记,并且我认为这不是必需的。 如何重写选择器以应对弃用? 相关问题: 不建议在Swift 4模式下使用Swift 3 @objc推论吗?
131 swift  xcode  swift4 

13
如果单元素解码失败,则Swift JSONDecode解码数组也会失败
在使用Swift4和Codable协议时,我遇到了以下问题-似乎没有办法允许JSONDecoder跳过数组中的元素。例如,我具有以下JSON: [ { "name": "Banana", "points": 200, "description": "A banana grown in Ecuador." }, { "name": "Orange" } ] 和一个可编码的结构: struct GroceryProduct: Codable { var name: String var points: Int var description: String? } 解码此json时 let decoder = JSONDecoder() let products = try decoder.decode([GroceryProduct].self, from: json) 结果products为空。这是可以预期的,因为JSON中的第二个对象没有"points"键,而points在GroceryProductstruct中不是可选的。 问题是如何允许JSONDecoder“跳过”无效对象?
116 arrays  json  swift  swift4  codable 

7
使用Swift 4中的JSONDecoder,丢失的键可以使用默认值而不是必须是可选属性吗?
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)") // `Error message: "Key not found when …
114 json  swift  swift4  codable 


12
Swift 4可解码协议中如何使用JSON字典类型解码属性
假设我的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但使用新的Swift 4 Decodable协议)之前,我仍然想不出一种方法。 有谁知道如何在Swift 4中使用Decodable协议实现这一目标?
103 json  swift  swift4  codable 

4
如何在Swift 4的Decodable协议中使用自定义键?
Swift 4通过该Decodable协议引入了对本机JSON编码和解码的支持。如何为此使用自定义键? 例如,说我有一个结构 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) { // Print JSON String print(json) …
102 json  swift  swift4  codable 

12
导航栏rightbaritem图像按钮错误iOS 11
此代码在ios10中可以正常工作。我得到我的标签和一个图像按钮,该按钮是用户照片资料,圆形。.好的。但是当运行xcode 9 ios11模拟器时,我将其拉长了。按钮框架必须是32x32,当在sim上检查并获取视图并告诉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: 0, y: 0, width: 32, height: 32) button.setTitleColor(UIColor.white, for: .normal) button.setTitleColor(UIColor.white, for: .highlighted) var …
101 ios  swift  ios11  xcode9-beta  swift4 


6
如何使用Swift Decodable协议解码嵌套的JSON结构?
这是我的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, // How do i …
90 json  swift  swift4  codable 

7
UIApplication.registerForRemoteNotifications()必须仅从主线程调用
Xcode 9(iOS 11)向我显示了注册推送(远程)通知时的错误/警告。 这是错误消息 这是代码,我已经尝试过: let center = UNUserNotificationCenter.current() center.delegate = self center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in if error == nil{ UIApplication.shared.registerForRemoteNotifications() } } 错误/警告行: UIApplication.shared.registerForRemoteNotifications() 如何解决呢?

14
Xcode 9:使用Swift 3.1编译的模块无法在Swift 4.0中导入
更新到Xcode 9之后,我尝试构建我的项目之一。 我使用FacebookLogin窗格。我在FacebookLogin / LoginButton.swift中出现编译器错误 @testable import FacebookCore ❌ Module compiled with Swift 3.1 cannot be imported in Swift 4.0 在目标的构建设置中,Swift语言版本设置为Swift 3.2。 我想我需要等待Facebook更新他们的pod吗?或其他建议? 谢谢 !

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.