标签: 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
查看次数

Skeleton Example for Swift Combine Publisher-Subscriber

As I port some Objective-C code to Swift, I'm trying to better understand the new Combine framework and how I can use it to re-create a common design pattern.

In this case, the design pattern is a single object (Manager, Service, etc) that any number of "clients" can register with as a delegate to receive callbacks. It's a basic 1:Many pattern using delegates.

Combine看起来很适合这个,但示例代码有点薄。下面是一个工作示例,但我不确定它是否正确或按预期使用。特别是,我对对象之间的引用循环很好奇。

class Service {

  let tweets = PassthroughSubject<String, Never>()

  func start() {
    // Simulate the need …
Run Code Online (Sandbox Code Playgroud)

publish-subscribe swift swift5 combine

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

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

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

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
查看次数

UIViewController 生命周期断了 iOS13,makeKeyAndVisible() 好像不能操作?

我有一个自定义的 UIStoryboardSegue,可以在 iOS12.* 中按需要工作。

目标视图控制器之一是 UITabbarController:对于每个选项卡,我都有一个嵌入在导航控制器中的控制器。

不幸的是,对于 iOS13.*,这不能很好地工作:视图控制器生命周期被破坏,并且不再调用 viewXXXAppear() 和 willTransition() 方法。

看起来 makeKeyAndVisible() 没有效果?!

在底部查看屏幕 UI 在没有调用 viewWillAppear() 的情况下是如何困惑的。

一个可怕的临时解决方法

我不得不拉我的头发,但是,我找到了一个公开的修复程序(我必须即时添加导航控制器)。

这弄乱了 vc 层次结构:你有更好的解决方案吗?

public class AladdinReplaceRootViewControllerSegue: UIStoryboardSegue {
    override public func perform() {

        guard let window = UIApplication.shared.delegate?.window as? UIWindow,
            let sourceView = source.view,
            let destinationView = destination.view else {
            super.perform()
            return
        }

        let screenWidth  = UIScreen.main.bounds.size.width
        let screenHeight = UIScreen.main.bounds.size.height

        destinationView.frame = CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight)

        window.insertSubview(destinationView, aboveSubview: sourceView)


        // **My fix**
        if …
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller uistoryboardsegue swift5 ios13

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

iOS 13 SearchController 后退按钮颜色

我的应用程序中有一个奇怪的视觉错误,它仅适用于从 Xcode 11 版本运行的 iOS 13。我有一个嵌入在导航控制器中的表格视图,默认色调颜色设置为我的应用程序的主要橙色。在 iOS12 上,当您取消搜索操作时,您会看到一个后退按钮,该按钮遵循主要橙色的全局导航控制器色调。这是预期的行为。如下图所示:iOS12中的橙色后箭头

但是,同样的代码在iOS13中产生了一个系统默认的蓝色后退箭头,如下图:

在此处输入图片说明

我已经尝试了一切来尝试覆盖那个蓝色的后退按钮,包括使用自定义操作创建一个自定义的 Bar Button Item,但这太混乱了,我只想简单地覆盖色调颜色。我已经尝试了很明显的searchController.searchBar.tintColor = UIColor(named:"Primary")searchController 是我的 UISearchController,并且我试图覆盖 self.navigationController 色调颜色。我试过本机访问 SearchBar,如下所示:UISearchBar.appearance().tintColor = UIColor(named:"Primary"),但仍然没有运气。我已经在 IB 中尝试了我能想到的所有其他方法,但我无法弄清楚如何达到这个后退按钮的色调。有人可以帮忙吗?

xcode swift swift5 ios13 xcode11

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

动态链接/通用链接在冷启动时不起作用

我使用 firebase 动态链接。当应用程序在后台并且我使用该application continue userActivity功能时,它们工作得非常好。但是,如果我单击动态链接并冷启动应用程序(不在后台运行),那么不仅不会application continue userActivity运行,当我在 处断点时didFinishLaunchingWithOptions,我尝试打印launchOptions并返回nil.

我完全按照文档描述的方式设置了动态链接。

在关联的域中 - 我有applinks:*******.page.link并在 URL 类型下创建了一个标识符*******.page.link和 URL 方案作为我的捆绑标识符。

didFinishLaunchingWithOptions- 之前FirebaseApp.configure(),我这样做(根据我发现的有关通用链接的类似问题的指示)FirebaseOptions.defaultOptions()?.deepLinkURLScheme = org.*******.*****

firebase swift ios-universal-links firebase-dynamic-links swift5

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

UserDefault 属性包装器不保存值低于 iOS 13 的 iOS 版本

我正在使用属性包装器来保存我的用户默认值。在 iOS 13 设备上,此解决方案效果很好。但是,在 iOS 11 和 iOS 12 上,这些值不会保存到用户默认值中。我读到属性包装器向后兼容,所以我不知道为什么这不适用于较旧的 iOS 版本。

这是属性包装器:

@propertyWrapper
struct UserDefaultWrapper<T: Codable> {
    private let key: String
    private let defaultValue: T

    init(key: String, defaultValue: T) {
        self.key = key
        self.defaultValue = defaultValue
    }

    var wrappedValue: T {
        get {
            guard let data = UserDefaults.standard.object(forKey: key) as? Data else {
                // Return defaultValue when no data in UserDefaults
                return defaultValue
            }

            // Convert data to the desire data type
            let value = try? JSONDecoder().decode(T.self, from: data) …
Run Code Online (Sandbox Code Playgroud)

ios swift swift5 property-wrapper

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