小编Ale*_*lex的帖子

可编码类的继承

我正在使用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
查看次数

如何使用string中的参数创建Selector

我正在使用Swift 3.1和Xcode 8.3.3编写程序.我想创建一个类,负责在键盘出现和消失时移动整个视图.但是我遇到了使用string中的参数创建自定义Selector的困难.要显示或隐藏键盘我们需要功能:

func keyboardWillShow(notification: Notification) {
//Code moving view when keyboard appears
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个这样的选择器:

let selector = Selector(("keyboardWillShow")
NotificationCenter.default.addObserver(view, selector: selector, name: .UIKeyboardWillShow, object: anyView.view.window)
Run Code Online (Sandbox Code Playgroud)

它正在编译,但是当键盘出现时,它会崩溃.因为它是独立的类我不能使用这种结构:

#selector(keyboardWillShow)
Run Code Online (Sandbox Code Playgroud)

因为它将Swift函数转换为Objective-C函数(添加@objc).所以问题是:如何用参数字符串创建一个Selector表单?

PS我可以把整个代码放在那里,但我不想要问题非常大,所以我会编辑问题,如果有人问...

notifications observers selector ios swift

9
推荐指数
1
解决办法
7063
查看次数

Swift自定义导航控制器类

读过的所有人,您好,谢谢。我正在使用Xcode 8.2.1和Swift 3.0为iOS设备编写Viber或WhatsApp之类的应用程序。我有一个问题:我希望我的应用程序有一个导航控制器,但不是一个简单的控制器,我希望它是自定义的。WhatsApp有一个印刷屏幕需要理解,我正在尝试实现以下目标:

WhatsApp与某人聊天的屏幕截图

如我们所见,该导航控制器具有3个按钮,即标签和带有头像的图像。我也想将颜色更改为绿色。由于这个原因,我创建了类:

import UIKit

class CustomNavigationController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationBar.barTintColor = UIColor.green


        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 39, height: 39))
        imageView.contentMode = .scaleAspectFit
        let image = UIImage(named: "logo")
        imageView.image = image
        navigationItem.titleView = imageView


    }
}
Run Code Online (Sandbox Code Playgroud)

结果如下: 在此处输入图片说明 如您所见,它没有图片。我知道如果添加以下代码:

        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 39, height: 39))
        imageView.contentMode = .scaleAspectFit
        let image = UIImage(named: "logo")
        imageView.image = image
        navigationItem.titleView = imageView
Run Code Online (Sandbox Code Playgroud)

到ViewController,将显示带有徽标的图像,但是我需要完整的类,该类将在某个地方连接(例如,在Interface Builder中),它将使按钮,图像等构成一个漂亮的导航控制器。此外,我可以使用另一个导航控制器,并将其连接到不同的屏幕,例如,在上面不需要图像,仅需要按钮。所以问题是:如何制作自定义的Navigation Controller类?

感谢您的帮助,我将非常高兴和感谢。

uinavigationbar uinavigationcontroller uinavigationitem ios swift3

7
推荐指数
1
解决办法
1万
查看次数

Swift CoreData:错误:严重的应用程序错误.在Core Data更改处理期间捕获到异常.

我正在iOS上编写一个程序,我正面临着这个错误:

2015-11-06 10:57:24.289 NETFNET [2503:976392] CoreData:错误:严重的应用程序错误.在Core Data更改处理期间捕获到异常.这通常是NSManagedObjectContextObjectsDidChangeNotification的观察者中的错误. - [__ NSCFSet addObject:]:尝试使用userInfo插入nil(null)2015-11-06 10:57:24.293 NETFNET [2503:976392]***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [ __NSCFSet addObject:]:尝试插入nil'

我想,我试图从主线程和后台线程同时访问数据库.我已经看到了很多针对Objective C的解决方案,但没有针对Swift的解决方案(我不知道Objective C ......).不幸的是,我不知道如何使用Grand Central Dispatch,事实上,我的程序并不需要几个步骤(我的意思是它需要它,但是如果某个线程丢失一个函数的信息一次,没有什么不好的意思发生).我只想在Swift 1或2上有稳定的程序,所以我会感谢任何帮助.

multithreading core-data objective-c ios swift

4
推荐指数
2
解决办法
4943
查看次数

如何隐藏选项卡栏控制器中的一个选项卡?

我正在使用 Xcode 10.1 和 Swift 4.2.1。我有这样的标签栏应用程序:

在此输入图像描述

由于某些原因,我想隐藏/删除其中一个栏以接收如下内容:

在此输入图像描述

那么,问题来了:如何隐藏Tab Bar的一个Tab呢?指定:按下某个按钮,隐藏一个选项卡。再按一次,Tab 会再次出现。

xcode uitabbarcontroller uitabbaritem uitabbar swift

2
推荐指数
1
解决办法
1748
查看次数