标签: swift5

Swift 5.0编译器无法导入使用Swift 4.2编译的Xcode 10.2模块

我刚刚将Xcode 10.1更新为Xcode 10.2,之后,当我尝试构建我的应用程序时,发现一个错误提示。使用Swift 4.2编译的模块不能由Swift 5.0编译器导入。

/myProjectFolderPath/myProjectName/ViewControllers/FeedbackVC/SupportViewController.swift:11:8: Module compiled with Swift 4.2 cannot be imported by the Swift 5.0 compiler: /myProjectFolderPath/Pods/ZendeskSDK/ZendeskSDK/4.2.1/ZendeskSDK.framework/Modules/ZendeskSDK.swiftmodule/x86_64.swiftmodule
Run Code Online (Sandbox Code Playgroud)

我通过cocoapods集成的ZendeskSDK出现了问题。

需要帮助和事先感谢。

ios zendesk swift4.2 swift5 xcode10.2

6
推荐指数
0
解决办法
2281
查看次数

快速迁移后为何IBOutlets是可选的

将项目迁移到快速5之后,我遇到了很多错误,例如

Expression implicitly coerced from 'UIButton?' to 'Any'
Run Code Online (Sandbox Code Playgroud)

我不确定是什么原因造成的。我正在设置view.accessibilityElements时(发生一堆)的一个例子。该数组应该包含:[Any]?...知道是什么原因造成的吗?

这是一个例子:

@IBOutlet weak var shareButton: UIButton!
@IBOutlet weak var shareTitleLabel: UILabel!

view.accessibilityElements = [shareButton, shareTitleLabel]
Run Code Online (Sandbox Code Playgroud)

这是另一个示例:

@IBOutlet weak var titleLabel: UILabel!

let titleConstraints = [
        NSLayoutConstraint(item: titleLabel, attribute: .leading, relatedBy: .equal, toItem: otherView, attribute: .leading, multiplier: 1, constant: horizontalTextInset),
        NSLayoutConstraint(item: titleLabel, attribute: .trailing, relatedBy: .equal, toItem: otherView, attribute: .trailing, multiplier: 1, constant: -horizontalTextInset)
]
Run Code Online (Sandbox Code Playgroud)

像这样设置上面的元素时,会导致提到的错误

swift swift5

6
推荐指数
1
解决办法
864
查看次数

从Swift 4转换为Swift 5时,Xcode 10.2(和10.2.1)使整个计算机崩溃

我有一个Mac应用程序项目,该项目使用Swift 4在XCode 10.2.1中生成并运行。当我尝试将其转换为Swift 5时,该过程开始,然后在大约32步(大约158个)中锁定该计算机,它要么重启,要么我不得不强迫它关闭。我应该寻找什么来阻止这种情况的发生?

“锁定”是指一切停止。XCode中的纺车图形表示事情正在停止。鼠标指针冻结。键盘无响应。屏幕上的所有动画都会停止(例如,如果指针是“死亡的旋转披萨”-会停止旋转)如果我将其放置足够长时间,则它可能会重新启动-两个提示音。

我试过转换另一个项目,并且转换没有任何问题。所以我要假设我有一个特定于该项目的东西

我已经在两台机器上进行了尝试-我的2012 Mac Mini配备16GB RAM,而MBP则更新了几年,配备了8GB RAM。两者都存在相同的问题。

我还尝试在项目中将Swift版本从4.0设置为4.2。发生相同的事情-机器处理更改并在此过程中锁定。但是,这次在锁定之前,我得到了“强制退出”对话框窗口,并显示一条消息,告诉我所有可用的应用程序内存已用完,我应该强制退出应用程序。在这一点上,机器死机了,所以我不能这样做。

我已经尝试过对该主题进行一些搜索,但没有发现任何描述我的问题的信息。

我没有要显示的代码,因为我不知道是什么代码引起的(如果有的话-当然这可能是XCode中的错误)。这可能是Xcode项目文件中的设置。

所需的结果-Xcode将我的项目从Swift 4转换为Swift 5。

实际结果-Xcode完全锁定了计算机。我必须关闭Mac电源并重新启动。

所以问题是-我应该寻找什么来解决这个问题?有没有其他人有这个问题?我该如何解决?冻结和重新启动有点令人震惊。

xcode swift swift4 swift5 xcode10.2

6
推荐指数
1
解决办法
341
查看次数

“过分展开的属性”警告?

我有一堂课,我有这样的财产:

var residenceId: Int!
Run Code Online (Sandbox Code Playgroud)

使用Xcode 10和Swift 4.2进行构建时,没有问题。但是,在安装Xcode 11 Beta并转换为Swift 5之后,我得到以下警告:

Implicitly unwrapped property 'residenceId' declared here
Run Code Online (Sandbox Code Playgroud)

在上一节课中,我还具有以下功能:

func jsonDictionary() -> [String : Any] {
    return ["residenceId": residenceId]
}
Run Code Online (Sandbox Code Playgroud)

我在这里得到警告

Coercion of implicitly unwrappable value of type 'Int?' to 'Any' does not unwrap optional
Run Code Online (Sandbox Code Playgroud)

我们是否不再被允许使用隐式展开的可选?

在此处输入图片说明

编辑:

经过更多研究之后,我开始相信“在这里声明的未包装属性'residenceId'实际上不是警告”,而是一些信息(以灰色标签而不是通常的黄色)以帮助我理解为什么我收到第二个警告。

为了澄清,我的问题是,我们是否不再能够使用“!” 属性上的符号定义一个隐式解开的属性(仅在我们确定它不会为nil时才明显),以便以后避免显式解开它(从而简化代码)。

swift swift5

6
推荐指数
1
解决办法
402
查看次数

Swift 5和iOS 13 UISearchController错误的呈现和消除行为

当我将项目更新到iOS 13时,我遇到了异常问题。我有显示和处理某些UISearchController动作的逻辑(下面的代码),所有部分在iOS 11和12中均正常运行。

我的任务是在导航栏中添加搜索按钮,以UISearchController在按钮操作后显示。

但是在iOS 13中,我遇到了2个问题:

从按钮动作调用的代码

func showSearch() {
        let searchResultsController = LUSearchResultsViewController()...
        let searchController = UISearchController(searchResultsController: searchResultsController)
        searchController.delegate = self
        searchController.searchResultsUpdater = searchResultsController
        navigationItem.searchController = searchController
        definesPresentationContext = true
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            searchController.isActive = true
        }
}
Run Code Online (Sandbox Code Playgroud)

只有一种解决方案可以帮助我显示搜索控制器,而与以前的iOS版本没有任何区别。

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            searchController.isActive = true
}
Run Code Online (Sandbox Code Playgroud)

在iOS 13,iOS 11和12上运行的代码无需asyncAfter

帮助我隐藏UISearchController和设置iOS 11和12(而非13)中的导航栏初始状态的代码。在SearchBar上点击“ 取消 ” 后,UISearchController开始调用委托方法。

  //MARK: UISearchControllerDelegate


    public func willDismissSearchController(_ searchController: UISearchController) {
         self.navigationItem.searchController = …
Run Code Online (Sandbox Code Playgroud)

ios swift uisearchcontroller swift5 ios13

6
推荐指数
1
解决办法
718
查看次数

具有动态高度的 UICollectionViewLayout - 但不使用流布局

假设您有一个带有普通自定义 UICollectionViewLayout 的 UICollectionView。

所以这不是<<<流布局 - 这是一个正常的自定义布局。

自定义布局很简单,在prepare调用中您只需遍历数据并布置每个矩形即可。所以说这是一个垂直滚动集合......

override func prepare() {
    cache = []
    var y: CGFloat = 0
    let k = collectionView?.numberOfItems(inSection: 0) ?? 0
    // or indeed, just get that direct from your data
    
    for i in 0 ..< k {
        
        // say you have three cell types ...
        let h = ... depending on the cell type, say 100, 200 or 300
        
        let f = CGRect(
            origin: CGPoint(x: 0, y: y ), …
Run Code Online (Sandbox Code Playgroud)

uicollectionview ios12 swift5

6
推荐指数
1
解决办法
946
查看次数

从 UIHostingController 中的 SwiftUI 调用函数

我有一个 swift UIHostingController,它呈现 SwiftUI。我在视图中调用了一个函数,它确实出现了,它构建得很好,但没有创建预期的输出。

class LoginView: UIHostingController<LoginViewComponent> {
    required init?(coder: NSCoder) {
        super.init(coder: coder, rootView: LoginViewComponent())
    }

    override func viewDidAppear(_ animated: Bool) {
        sessionHandler()
    }

    func sessionHandler(){
        let user = User()
        if user.isLoggedIn(){
            view.isUserInteractionEnabled = false
            print("Authenticating Session")
            self.rootView.loginState(state: "success")
        }else{
            view.isUserInteractionEnabled = true
            print("Needs Logging in")
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

函数 ("loginState(state: "success")") 在 SwiftUI 视图类中调用时有效,但是当从托管控制器调用时它不起作用。

任何帮助将不胜感激。

xcode ios swift swift5 swiftui

6
推荐指数
1
解决办法
2552
查看次数

如何为 UserDefaults 编写单元测试

我有两个函数,其中一个函数基本上检索用户默认值中的字符串,另一个函数将字符串写入用户默认值中。我不明白我应该进行单元测试还是不进行?我对单元测试的概念还很陌生。

我在互联网上搜索测试用户默认值,但最后建议我模拟测试。

我的问题是,如果有办法测试用户默认值,最好的方法是什么?

常量和结构体

let defaults = UserDefaults.standard
let defaultinformation = "ABCDEFG"

struct Keys {
    static let Information = "Information"
}
Run Code Online (Sandbox Code Playgroud)

保存信息的功能

func SetDefaultInformation() {
    defaults.set(defaultinformation, forKey: Keys.Information)

}
Run Code Online (Sandbox Code Playgroud)

检索信息的函数

func checkForInformation() -> String {
    let Information = defaults.value(forKey: Keys.Information) as? String ?? ""
    return Information
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

nsuserdefaults xctest swift userdefaults swift5

6
推荐指数
2
解决办法
5465
查看次数

iOS 13.4 当应用程序从前台网络转到后台时断开连接

重现步骤:

  1. 创建一个新应用程序并调用服务器的任何 API 来获取数据
  2. 立即将应用程序置于后台
  3. 网络断开

下面是日志:

2020-03-26 17:21:00.894598+0530 TestApp[783:152843] 连接 2:收到失败通知

2020-03-26 17:21:00.895805+0530 TestApp[783:152843] 连接 2:连接失败 1:53,原因 -1

2020-03-26 17:21:00.895895+0530 TestApp[783:152843] 连接 2: 遇到错误(1:53)

2020-03-26 17:21:00.901375+0530 TestApp[783:152843] 任务 <36B9553A-99F2-42FE-8650-A5E5155EFCFD>.<1> HTTP 加载失败,0/0 字节(错误代码:-1005 [1 :53])

2020-03-26 17:21:00.901831+0530 TestApp[783:152843] 连接 1:收到失败通知

2020-03-26 17:21:00.902078 + 0530 TestApp [783:152843] [] nw_flow_add_write_request [C1.1 40.85.185.46:443失败的通道流(满足(路径满足),接口:en0,ipv4,dns) ] 无法接受写入请求

2020-03-26 17:21:00.902200 + 0530 TestApp [783:152843] [] nw_write_request_report [C1]发送失败,错误“套接字未连接”

2020-03-26 17:21:00.905902 + 0530 TestApp [783:152870]任务<36B9553A-99F2-42FE-8650-A5E5155EFCFD>。<1>完成,错误[-1005]错误域= NSURLErrorDomain代码= -1005“网络连接丢失了。” UserInfo = {NSUnderlyingError = 0x2824734e0 {错误域= kCFErrorDomainCFNetwork Code = -1005“(null)”UserInfo = …

ios swift5 ios13 ios13.3

6
推荐指数
0
解决办法
2635
查看次数

在 Swift 包中包含 Playgrounds 的正确方法是什么?

当我发布一个 Swift 包时,我喜欢包含一些 Playgrounds 来展示如何使用这个包的示例。在 Swift 5.4 之前,我能够以相对简单的方式执行此操作,但现在我的 Playgrounds 都没有看到我的包模块的内容。这对我来说没有任何意义。

我遵循了 Apple 自己的 WWDC 视频所说明的确切模式,即有一个Playgrounds/文件夹作为您的Sources/文件夹的对等点,然后只需导入包模块。

导入有效,但 Playground 总是报告它无法从模块内部找到任何类型。它们都被标记为public,正如我之前提到的,这些过去工作得很好。

在此处输入图片说明

这在Swift 5.45.5 中,在Xcode 12.513 Beta 中对我不起作用。

我认为一定有一些我不理解的设置或配置。有人可以在这里解释一下最佳做法吗?

作为参考,这里是我的一个简单的 Swift 包,它的 Playgrounds 目前不起作用:https : //github.com/dunesailer/Wordsmith

编辑:它变得更奇怪了。我有一个不同的Swift 包,其结构在我看来完全相同,但它的 Playgrounds 工作正常。什么?那个在这里:https : //github.com/dunesailer/Aesthete

xcode swift swift-playground swift-package-manager swift5

6
推荐指数
1
解决办法
137
查看次数