标签: swift4

UI API在Swift 4中从后台线程调用并运行Firebase 4

这些是我下载Xcode 9测试版后我项目中出现的错误.

错误消息

这直接连接到这篇文章.其中类似的问题得到解决.我最初也有这个问题并通过遵循公认的解决方案来修复它.但是,这并没有修复我得到的其他错误消息.

是什么导致了这些?他们有问题吗?我该如何预防?

xcode ios firebase swift swift4

11
推荐指数
1
解决办法
4964
查看次数

在参数传递时编译Swift 4中的错误

我在Xcode 9 Beta 3中使用了第三方库.我在完成调用中收到以下错误,我无法解决此错误:

DispatchQueue.main.asyncAfter(deadline: .now() + delay) { 
    self.animationView?.alpha = 0
    self.containerView.alpha  = 1
    completion?()    // -> Error: Missing argument parameter #1 in call.   
}
Run Code Online (Sandbox Code Playgroud)

并在完成功能中获得以下警告:

func openAnimation(_ completion: ((Void) -> Void)?) {    
    // -> Warning: When calling this function in Swift 4 or later, you must pass a '()' tuple; did you mean for the input type to be '()'?
}    
Run Code Online (Sandbox Code Playgroud)

swift swift4 ios11 xcode9-beta

11
推荐指数
1
解决办法
3826
查看次数

iOS 11关于iPhone x安全区域的布局指南

我的应用程序已经在应用程序商店中,昨天我将我的Xcode版本更新为9并且除了iPhone x以外工作正常.用户界面崩溃了.

1.我已经创建了两个UIView(两者都是固定高度),名为Header和Tab bar,我已经隐藏了我的NavigationBar整个应用程序.

2.为UIViewController添加了扩展,用于创建HeaderTab栏

func addHeaderTab(currentViewController:UIViewController,content:String, isMenu:Bool){
        let noView = TopHeaderView()
        noView.tag = 12345
        noView.isMenu = isMenu
        noView.translatesAutoresizingMaskIntoConstraints = false
        currentViewController.view .addSubview(noView)
        if isMenu{
            noView.menuBtn .setImage(UIImage(named: "Small"), for: .normal)
            noView.logoImg.isHidden = false

        }else{
            noView.menuBtn .setImage(UIImage(named: "arrow_small"), for: .normal)
            noView.logoImg.isHidden = true
        }
        noView.titleLbl.text = content
        noView.delegate = (currentViewController as! menuOpen)

        NSLayoutConstraint(item: noView, attribute: .leading, relatedBy: .equal, toItem: currentViewController.view, attribute: .leading, multiplier: 1.0, constant: 0.0).isActive = true

        NSLayoutConstraint(item: noView, …
Run Code Online (Sandbox Code Playgroud)

ios autolayout swift4 xcode9 iphone-x

11
推荐指数
2
解决办法
2万
查看次数

另一个viewcontroller中引用的Xib标签

这是我得到的错误消息:由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是密钥nameLabel的密钥值编码兼容.以下说明了它与其他问题的不同之处.因为我实际上是按照提供的链接的说明.

我已将Xib链接如下:我想使用的ViewController是MapViewController.Xib是MarkerInfoView文件所有者是MapViewController,它也是我创建出口的地方.

在此输入图像描述

xcode swift4 ios11

11
推荐指数
1
解决办法
105
查看次数

忽略Codable对象中的非Codable可选属性

当符合Codable协议时,我不能轻易跳过非Codable类的可选属性

Ride结构,我们要跳过的编码解码driver财产,只要把它nil解码时:

  struct Ride: Codable {

    public var number: String
    public var passenger: Passenger? // Codable conforming
    public var driver: Driver?       // NSObject subclass, doesn't conform to Codable

    enum CodingKeys: String, CodingKey {
      case number
      case passenger
    }
  }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我得到一个编译错误

类型'驱动程序'不符合协议'可解码'

到目前为止,我提供的唯一解决方案是通过提供以下方法手动编码和解码:

public init(from decoder: Decoder) throws {
    let values = try decoder.container(keyedBy: CodingKeys.self)
    number = try? values.decode(String.self, forKey: .number)
    passenger = try? values.decode(Passenger.self, forKey: .passenger) …
Run Code Online (Sandbox Code Playgroud)

json swift swift4 codable decodable

11
推荐指数
1
解决办法
4521
查看次数

Swift 4协议组成一致性

[ 首先,如果有人对问题有更好的名称,提案就会被广泛接受.到目前为止,我没有找到更好的名称.]

所以,这就是问题所在.

假设我有一个协议ProtocolA,协议ProtocolB和协议ProtocolX定义如下:

protocol ProtocolA {
  func doSomethingA()
}

protocol ProtocolB {
   func doSomethingB()
}

protocol ProtocolX {
   var handler: ProtocolA { get }
}
Run Code Online (Sandbox Code Playgroud)

然后我在ProtocolX的一个类中有一个正确的实现,如下所示:

class Donald: ProtocolX {
   ...
   var handler: ProtocolA { ... }
   ...
}
Run Code Online (Sandbox Code Playgroud)

然后一切正常,协议要求得到正确履行.

如果我这样实现:

class Donald: ProtocolX {
   ...
   var handler: ProtocolA & ProtocolB
   ...
}
Run Code Online (Sandbox Code Playgroud)

我有一个编译时问题,报告我的类Donald不符合ProtocolX(根据规范,要求var handler必须符合ProtocolA).

从理论上讲,var handlerIS符合ProtocolA(但它也符合ProtocolB …

swift swift4

11
推荐指数
1
解决办法
850
查看次数

KV在Swift 4中保留一个协议

我正在努力在Swift 4中使用新的强类型KVO语法来观察仅通过协议可见的属性:

import Cocoa

@objc protocol Observable: class {
    var bar: Int { get }
}

@objc class Foo: NSObject, Observable {
    @objc dynamic var bar = 42
}

let implementation = Foo()

let observable: Observable = implementation

let observation = observable.observe(\.bar, options: .new) { _, change in
    guard let newValue = change.newValue else { return }

    print(newValue)
}

implementation.bar = 50
Run Code Online (Sandbox Code Playgroud)
error: value of type 'Observable' has no member 'observe'
let observation = observable.observe(\.bar, options: .new) { _, change …
Run Code Online (Sandbox Code Playgroud)

key-value-observing swift-protocols swift4

11
推荐指数
1
解决办法
893
查看次数

尝试转换为当前的Swift语法时,"找不到转换目标"

我搜索了很多,似乎无法找到这个具体问题的答案.我有一个较旧的项目,用Swift 2编写.我试图将它转换为Swift 4,转到"编辑>转换>到当前的Swift语法......"

它打开一个模态,里面是空白的,在顶部说:"没有目标转换找到."

我试过搞乱它,似乎无法弄清楚这一点.任何帮助表示赞赏!我在这里得到的截图

xcode swift swift4

11
推荐指数
1
解决办法
2669
查看次数

可编码类的继承

我正在使用Swift 4和Xcode 9.2编写程序.我在编写可编码类(完全是类,而不是struct)时遇到了困难.当我尝试从另一个类继承一个类时,JSONEncoder不从子类(子)获取所有属性.请看这个:

class BasicData: Encodable {

    let a: String
    let b: String

    init() {
        a = "a"
        b = "b"
    }
}

class AdditionalData: BasicData {

    let c: String

    init(c: String) {
        self.c = c
    }

}

let encode = AdditionalData(c: "c")

do {
    let data = try JSONEncoder().encode(encode)
    let string = String(data: data, encoding: .utf8)
    if let string = string {
        print(string)
    }
} catch {
}
Run Code Online (Sandbox Code Playgroud)

它会打印出来: {"a":"a","b":"b"}

但我需要这个: {"a":"a","b":"b","c":"c"}

它看起来像c类的属性AdditionalData只是失去了某处,不知何故.

所以问题是:如果我有使用协议编码的类Encodable如何正确地创建子类(此类的子类,继承)类?

我会感谢任何帮助或建议.

inheritance swift4 codable decodable encodable

11
推荐指数
1
解决办法
1599
查看次数

#if canImport(module)仍然无法解决Swift 4.1中的条件导入语句吗?

我的应用程序从iOS 9版本开始支持。我要添加Icecream框架以同步领域对象的框架之一需要iOS 10或更高版本。

如何使框架的导入成为条件?

我尝试将IceCream框架设为项目“ 常规”选项卡下的“ 链接的框架和库”下为可选

在Swift 4.1中,可以使用canImport指令进行条件导入,就像我下面尝试过的那样。

#if canImport(IceCream)
  import IceCream
#endif
Run Code Online (Sandbox Code Playgroud)

上面的import语句仍然引发构建错误:模块部署目标是iOS10

我缺少什么配置?

ios swift swift4

11
推荐指数
1
解决办法
802
查看次数