小编kme*_*l96的帖子

什么时候在 UIView 或 UIViewController 上调用“required init?(coder aDecoder: NSCoder)”?

当我使用存储属性创建UIView或创建子类时UIViewController,Xcode 不会编译我的项目,除非我包含required init?(coder aDecoder: NSCoder). 目前,我有以下实现来关闭编译器:

required init?(coder aDecoder: NSCoder) {
    fatalError()
}
Run Code Online (Sandbox Code Playgroud)

我明白为什么我需要包含这个初始化程序;我的子类需要符合NSCoding协议,因为它的超类符合它,并且这个初始化器是NSCoding协议的一部分,所以它需要与我的类一起工作,即初始化我的类的所有存储属性(初始化器的超类版本会赢)做)。

我想一个正确的实现应该是这样的:

class MyView: UIView {
    let label: UILabel

    override init(frame: CGRect) {
        label = UILabel()
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        if let label = aDecoder.decodeObject() as? UILabel {
            self.label = label
        } else {
            return nil
        }
        super.init(coder: aDecoder)
    }

    override func encode(with aCoder: NSCoder) {
        aCoder.encode(label)
        super.encode(with: aCoder)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,考虑到我的应用程序有 50 …

nscoding uiviewcontroller uiview ios swift

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

Firebase Analytics ITEM_ID 与 CONTENT_TYPE

在我的 iOS 应用程序中,我使用以下 Firebase Analytics 函数调用:

Analytics.logEvent(AnalyticsEventSelectContent, parameters: [
    AnalyticsParameterItemID: "id-button",
    AnalyticsParameterContentType: "button"]
)
Run Code Online (Sandbox Code Playgroud)

我知道我可以为 ItemID 和 ContentType 参数添加任何内容String,但是每个参数的预期用途是什么?他们应该如何不同?

ios firebase swift firebase-analytics

7
推荐指数
0
解决办法
595
查看次数

DateComponentsFormatter 减少零小时但不减少零分钟

我正在尝试使用 aDateComponentsFormatter将秒数格式化为时间字符串 HH:MM:SS。我总是想显示分钟和秒字段,但如果小时数为 0,我不想显示小时数。我尝试设置

formatter.zeroFormattingBehavior = .dropLeading
Run Code Online (Sandbox Code Playgroud)

但是,如果小时和分钟都是 0,这也会导致分钟数被删除。

目前,我的解决方案如下:

if timeElapsed >= 3600 {
    formatter.allowedUnits = [.second, .minute, .hour]
} else {
    formatter.allowedUnits = [.second, .minute]
}
formatter.zeroFormattingBehavior = .pad
Run Code Online (Sandbox Code Playgroud)

但是,我担心这个解决方案非常笨拙,如果有一些国际化不认为一小时是 3600 秒,则该解决方案将无法正常工作。有更好的解决方案吗?

localization internationalization ios swift nsdatecomponentsformatter

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

迅速进口声明不再需要

通过Swift的最新更新,我可以使用Foundation和UIKit的类,函数等,而无需为它们包含import语句.如果我在Xcode中添加import语句,它会显示它被划掉,就像它被折旧一样.

是否不再需要在Swift中包含某些模块(如Foundation和UIKit)的import语句?

xcode swift

5
推荐指数
1
解决办法
1419
查看次数

Firebase 性能无法启动跟踪,因为它已启动和停止

我正在尝试使用以下代码创建一个非常简单的 Firebase 性能跟踪:

let trace = Performance.startTrace(name: "setup")
setup()
trace?.stop()
Run Code Online (Sandbox Code Playgroud)

我希望此跟踪要做的就是跟踪 setup() 函数运行所需的时间。它似乎是第一次工作,但在那之后,我将此消息打印到控制台:[Firebase/Performance] Failed to start trace setup because it has already been started and stopped.

这个警告值得关注吗?如果是这样,我做错了什么导致此警告?

firebase swift firebase-performance

5
推荐指数
1
解决办法
816
查看次数

Swift AVAudioPlayer从Beginning重启

我有一个AVAudioPlayer存储在名为"播放器"的属性中.当用户单击按钮时,它会触发此代码:

@IBAction func restartPressed(sender: AnyObject) {
    player.play()
}
Run Code Online (Sandbox Code Playgroud)

当用户非常快速地连续两次单击按钮时,就会出现问题.

如果第一次点击的声音仍在播放,则似乎忽略了第二次调用.

相反,我想要:

a)第二次点击按钮时,从头开始重启播放器; 要么

b)同时播放声音的两个"实例".

我将如何实现其中一个或两个选项?

avaudioplayer ios swift

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

通过将小时设置为0更改日期来设置Swift日历日期

如果我运行以下代码:

let date = Date()
let midnight = Calendar.current.date(bySetting: .hour, value: 0, of: date)!
let difference = Int64(midnight.timeIntervalSince(date))
print(String(difference))
Run Code Online (Sandbox Code Playgroud)

差异是大约13小时的正值(因为现在本地时间是大约11 AM)。但是,我希望两者之间的差值为11小时。由于我将.hour值设置为,0我希望时间会向后移动,而不是向前移动。

我希望明天必须使用以下代码找到午夜:

let midnight = Calendar.current.date(bySetting: .hour, value: 0, of:
   Calendar.current.date(byAdding: .day, value: 1, to: date)!)!
Run Code Online (Sandbox Code Playgroud)

但这将使+37小时而不是+13小时。

当前的行为实际上是我想要的行为(我想知道直到明天午夜的时间)。但是,我想了解为什么会发生这种情况,尤其是要确保这种找到明天午夜的方法在任何时区都适用。谢谢!

编辑:请注意,我只关心午夜之前的时间,这就是为什么我不更改午夜时的分钟或秒值的原因。

nsdate swift

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

Objective-C相对文件路径

我有一个xcode/objective-c项目,旨在与命令行(特别是iOS或mac)一起使用.该项目位于一个名为Prototype的文件夹中,在这个文件夹中我有一个文本文件:data.txt.我正在尝试创建一个方法来将data.txt的内容作为NSString返回.我使用以下代码成功完成了此操作:

+ (NSString *)loadTextFileToString:(NSString*)fileDest {
    NSString *filePath = @"/Users/John/Documents/Objective-C/Prototype/Prototype/data.txt"
    NSError *error = nil;
    NSString *fileContent = [NSString stringWithContentsOfFile:filePath
                                                  encoding:NSASCIIStringEncoding
                                                     error:&error];
    return fileContent;
}
Run Code Online (Sandbox Code Playgroud)

这种方法有效,但我想用相对路径而不是绝对路径访问该文件.例如,在Eclipse中,我将使用路径"src/data.txt".我可以采用类似的方法在xcode/objective-c中创建相对文件路径吗?

xcode objective-c

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