我正在尝试将自定义类存储在UserDefaults中,但是当应用程序启动后,我会立即遇到"Attempt to insert non-property list"错误.我已经成功存储了自定义类的数组,所以我遵循相同的原则,但是有问题. 这是我的班级: import Foundation public class PlanRouteFilters: NSObject, NSCoding, Codable { var favoriteLines: Bool var routeType: Int var bus: Bool var train: Bool var subway: Bool var electric: Bool var sharedCar: Bool var bike: Bool var electricScooter: Bool var providers: [Provide
以下是关于 swift5 的编程技术问答
我有一个带有表的视图控制器.视图控制器具有一个按钮,该按钮与另一个具有4个TextFields的控制器相关.还有一个名称Textfield,还有三个可以输入数字.当用户按添加用户时,将附加数组,并在更新上一个视图控制器中更新表格时忽略视图控制器.然后,向用户赠送了一个添加了一个新单元格的表.该单元有4个标签. 我试图弄清楚如何将单元格中的每个标签设置为创建新单元格的视图控制器中的四个文本字段.这是具有创建单元格的视图控制器的图片: 这是视图控制器,当按下加号按钮通过更新数组创建单元格时: 我希望能够设置最左边的标签,以表示每次添加到数组的名称.当一个人第一次单击加上按钮时,TextFields View Controller将弹出,用户可以将名称放在TextField中.按下"添加"按钮时,左侧的标签将显示附加数组的控制器中的名称.通过视图控制器添加的下一个名称将位于先前名称下方的单元格中,依此类推.我需要获取数组才能正确显示文本.我最初希望这些单元格具有用户可以将信息
我获取了数据,并且在打印时显示了它,但是当我尝试在tableview.chand上显示. 我是否将tableview.reloddata放在错误的地方? override func viewDidLoad() { super.viewDidLoad() fetchData() tableView.reloadData() } func fetchData() { if let url = URL(string: urlConstant) { let session = URLSession(configuration: .default) let task = session.dataTask(with: url) { (data, res, err) in if err == nil {
我有一个名为homesList的变量,我在函数调用服务器的完成处理程序中设置了一个变量.但是,homesList在PreviewProvider中无法访问.如何在预告介绍中访问homesList? struct HomeRow: View { var home: Home @State private var homesList: [Home] var body: some View { HStack { Text(home.homeName) Spacer() } .onAppear { retrieveHomes(completionHandler: { (json) in self.homesList = json }) } } } struct HomeRow_Previews: PreviewProvider { static var pr
在iOS模拟器中,我遵循了基本步骤,将铅笔库包括在我的视图控制器中.我在UI中找到了工具包,但无法绘制..不确定我在这里缺少什么.分享我尝试的代码. import UIKit import PencilKit class DrawingBoardViewController: UIViewController { @IBOutlet weak var canvasView: PKCanvasView! override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) setupCanvasView() } func setupCanvasView() { let toolPicker = PKToolPicker.init() toolPicker.setVisi
我也是Swift和Codable的新手.我的编码下方.我在"近期"中得到了API的所有回应.我想检查"数据"是否为空.我该如何检查? struct RecentResult: Codable { let input: Input let commandResult: CommandResultClass } struct CommandResultClass: Codable { let success: Int let message: String let data: DataClass } struct DataClass: Codable { let recentCount: String enum CodingKeys: String, CodingKey { case recentCoun
很长一段时间以来,我一直在Swift应用中使用Realm 3.17.3. 让我们调用该应用程序版本1. 不久前,我更新了我的podfile以使用Realm 10.7.2. 让我们调用该应用程序2. 执行此操作后,在模拟器上测试我的应用程序时,有时在尝试打开默认领域文件时会崩溃. 崩溃通常发生在我运行应用程序2,chackkout应用程序1时,然后进行pod安装并运行应用程序. self._realm = try! Realm(configuration: configuration) // crash 领域给出的错误是: NSError domain: "io.realm" - code: 2 "NSFilePath" : "../Library/Developer/CoreSimulator/Devices/15EF6132-9EA7-4946-81E4-78B48B8AC5E1/data/Containers/Data/Applica
我有这个代码,我需要通过其他应用程序重复使用. 此代码显示存在局部应用程序名称的消息. 所以,我有这样的本地字符串: "DoYou" = "Do you really want to close $$$?"; "Quit" = "Quit $$$"; "Keep Running" = "Keep $$$ Running"; 其中$$$必须在运行时替换为本地化应用程序的名称. 因为我想了解属性包装纸,所以我试图创建这个: extension String { func findReplace(_ target: String, withString: String) -> String { return self.replacingOccurrences(of: target, with: withString,
我做了一个可重复使用的圆形进度栏.我应用了repeatForever动画来保持其旋转,但仅在直接与@State或@publed变量一起使用时起作用,并且当它嵌入在另一个视图中时不起作用. 可重复使用的ringview.这是一个圆形的进度条 struct RingView: View { private let percent: CGFloat = 80 // Keeping it fixed 80 for test purpose var color = Color.primaryLightColor // Some random color @Binding var show: Bool var body: some View { ZStack { GeometryReader { bounds in Circle() .t
我刚刚学会了Swift并开发了一个iOS项目. 但是,当我单击它时,按钮标题不会更改.我该如何更改标题? 模拟器:iPhone 11 IOS14.4 这是代码: import UIKit class ViewController: UIViewController { @IBOutlet weak var helloButton: UIButton! @IBAction func showAlert(_ sender: Any) { //var alert = UIAlertController(title: "Hello!", message: "Hello, world!",preferredStyle: UIAlertControllerStyle.Alert) let alert = UIAlertController(title: "Hello", message: "Hello, world", prefe
我已经在Swift-5中编写了类方法,其中的参数结果类型,现在我想在Objective-C中使用此方法,是否有可能?如果是,如何? @objc public class DemoClass :NSObject { @objc public func demoMethod(completion: @escaping (Result) -> Void) { //some codes } } 我一旦将@OBJC添加到方法中,就会引发错误:方法无法标记@OBJC,因为参数的类型无法在Objective-C 中表示. 解决方案 枚举结果在Objective-C中无法访问.它是@frozen,而不是@inlinable. 以及Objective-C枚举也不是通用的,即Result where Failure: Error不能暴露于Objective-C.
我正在尝试复制Apple教程(组成复杂的接口),并且我有一个非常奇怪的问题.我的CategoryItem视图被显示为蓝色框架. 如果我删除包裹它的NavigationLink,一切都很好,但是它却没有. struct CategoryRow: View { var categoryName: String var items: [Landmark] var body: some View { VStack(alignment: .leading) { Text(self.categoryName) .font(.headline) .padding(.leading, 15) .padding(.top, 5) ScrollView(.horizontal, showsIndicators
来自苹果的文档: @dynamicCallable属性让您呼叫named types 使用简单的句法糖的功能.主要用例是 动态语言互操作性. 为什么要使用@dynamicCallable而不是直接批准? 解决方案 @dynamicCallable是Swift 5的新功能.来自保罗·哈德森(Paul Hudson)关于"如何在swift中使用@dynamiccallable"的文章(强调矿山): se-0216 一个新的 @dynamicCallable属性 swift, 带来它可以将类型标记为直接可调用的能力. 它是句法糖,而不是任何的编译器魔术, 有效地转换此代码: let result = random(numberOfZeroes: 3) 进入: let result = random.dynamicallyCall(withKeywordArguments: ["numberOfZeroes": 3]) [...] @dynamicC
这是我的第一篇文章. 我是日本iOS工程师(刚刚成为这个月). 我在removeObserver NotificationCenter的方法中遇到了麻烦. 我通过使用闭合类型addObserver将观察者添加到ViewController(VC)中. 我想在VC的除静脉化调用时删除此观察者. 我在VC的deinit方法中写了NotificationCenter.default.removeObserver(self).但是,这似乎对我不起作用. 有什么问题? 此外,如果我的代码有内存泄漏问题,请让我知道如何修复它. 这是我的代码的一部分. class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(forN
我需要将UITabBar高度更改为95.我可以在旧版本的iOS Swift中这样做.这是我在较旧版本中使用的代码. override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() tabBar.frame.size.height = 95 tabBar.frame.origin.y = view.frame.height - 95 menuButton.frame.origin.y = self.view.bounds.height - tabBar.frame.size.height - 10 shadowBtn.frame.origin.y = self.view.bounds.height - tabBar.frame.size.height - 15 } 解决方案 在 viewdidlayoutsubviews 中尝试一下 override
方法已从iOS 14中弃用,因此需要对iOS 14和更高版本的支持.和iOS 13和更早. 解决方案 这是 swift 5 编写的完整代码,以支持 iOS 14及以后的早期版本 此方法已从iOS 14 中删除 public init(documentTypes allowedUTIs: [String], in mode: UIDocumentPickerMode) 在您的按钮操作中写入此代码 @IBAction func importItemFromFiles(sender: UIBarButtonItem) { var documentPicker: UIDocumentPickerViewController! if #available(iOS 14, *) { // iOS 14 & later let supportedTypes: [UTType] = [U
我已将Xcode更新为12.3,我得到了新的错误. 找不到目标" Arm64-Apple-ios模拟器"的模块" Alamofire";找到:x86_64-apple-ios-simulator,x86_64 命令汇编WIFT失败了非零退出代码 解决方案 另一个解决方法是将buildSettings - >"验证工作区"设置为Yes.它仍然会显示警告,但会构建项目. 其他解决方案 我使用的是迦太基0.38和xcode 13.我在建造Moya时遇到了此问题. 我发现在文件迦太基>构建> iOS 中,有一个重复的Alamofire框架构建(另一个是在迦太基> build中),Xcode以某种方式将其用于构建Moya. 我删除了副本,可以成功地构建. 其他解决方案 更改您的项目名称 仅使用英语字符
我有一个自我尺寸的集合视图,当我调用super.layoutsubviews我的应用程序崩溃时,由于集合视图输入了递归更新循环.这在iOS 14及以下工作正常.但在iOS 15中观察到了. class DynamicCollectionView: UICollectionView { override var contentSize: CGSize { didSet { invalidateIntrinsicContentSize() } } override func layoutSubviews() { super.layoutSubviews() if bounds.size != intrinsicContentSize { invalidateIntrinsicContentSize() } } override var intrinsicContentSize: CGSize { re
重新介绍git提交后,我将不再能够获取软件包,因为SP Manager使用了一些我找不到和清洁的缓存.获取错误: 修订版30C16CAB9C718416FEE2191FF2AC0B6F91EEB511用于基础 远程Erotesourcecontrol https://github.com/myuser/myuser/myrepo 版本1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 不匹配先前记录的值 我清洁了我所知道的所有地方:本地.build文件夹,家庭中的SPM缓存和图书馆/缓存文件夹,派生data,删除了包装. 使用Swift 5.7,尝试通过swift package generate-xcodeproj生成. 有人知道这个缓存在哪里吗? 解决方案 这个人为我解决了问题. rm -rf ~/Library/Caches/org.swift.swiftpm rm -rf ~/Library/org.swift.swiftpm 来自 So