这些是我下载Xcode 9测试版后我项目中出现的错误.
这直接连接到这篇文章.其中类似的问题得到解决.我最初也有这个问题并通过遵循公认的解决方案来修复它.但是,这并没有修复我得到的其他错误消息.
是什么导致了这些?他们有问题吗?我该如何预防?
我在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) 我的应用程序已经在应用程序商店中,昨天我将我的Xcode版本更新为9并且除了iPhone x以外工作正常.用户界面崩溃了.
1.我已经创建了两个UIView(两者都是固定高度),名为Header和Tab bar,我已经隐藏了我的NavigationBar整个应用程序.
2.为UIViewController添加了扩展,用于创建Header和Tab栏
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) 这是我得到的错误消息:由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是密钥nameLabel的密钥值编码兼容.以下说明了它与其他问题的不同之处.因为我实际上是按照提供的链接的说明.
我已将Xib链接如下:我想使用的ViewController是MapViewController.Xib是MarkerInfoView文件所有者是MapViewController,它也是我创建出口的地方.
当符合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) [ 首先,如果有人对问题有更好的名称,提案就会被广泛接受.到目前为止,我没有找到更好的名称.]
所以,这就是问题所在.
假设我有一个协议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 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) 我搜索了很多,似乎无法找到这个具体问题的答案.我有一个较旧的项目,用Swift 2编写.我试图将它转换为Swift 4,转到"编辑>转换>到当前的Swift语法......"
它打开一个模态,里面是空白的,在顶部说:"没有目标转换找到."
我试过搞乱它,似乎无法弄清楚这一点.任何帮助表示赞赏!我在这里得到的截图
我正在使用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如何正确地创建子类(此类的子类,继承)类?
我会感谢任何帮助或建议.
我的应用程序从iOS 9版本开始支持。我要添加Icecream框架以同步领域对象的框架之一需要iOS 10或更高版本。
如何使框架的导入成为条件?
我尝试将IceCream框架设为项目“ 常规”选项卡下的“ 链接的框架和库”下为可选
在Swift 4.1中,可以使用canImport指令进行条件导入,就像我下面尝试过的那样。
#if canImport(IceCream)
import IceCream
#endif
Run Code Online (Sandbox Code Playgroud)
上面的import语句仍然引发构建错误:模块部署目标是iOS10
我缺少什么配置?
swift4 ×10
swift ×6
ios ×3
xcode ×3
codable ×2
decodable ×2
ios11 ×2
autolayout ×1
encodable ×1
firebase ×1
inheritance ×1
iphone-x ×1
json ×1
xcode9 ×1
xcode9-beta ×1