草庐IT

lazy-init

全部标签

Swift - 在闭包类型上调用 .init

这没有任何实际应用,但今天让我感到惊讶,我想了解它为什么会起作用。所以这实际上是有效的代码:vartest:((Bool)->())?test=.init({ainprint(a)})但这不是test=((Bool)->()).init({ainprint(a)})原因是“类型‘(Bool)->()’没有成员‘init’”为什么示例一有效?init调用实际上属于什么? 最佳答案 test是一个可选的闭包,并且test=.init({ainprint(a)})调用initOptional的方法|,不是闭包类型。这是一个“implici

ios - 使用 init 作为闭包

最近在一本书(关于CoreData)中看到如下代码行returnmodelURLs(in:modelName).compactMap(NSManagedObjectModel.init)我知道代码的作用,但问题是:为什么以及如何工作?应该有一个闭包作为compactMap函数的参数,但是NORMAL括号中只有一个“NSManagedObjectModel.init”。它有什么secret呢?它在那里做什么?如果有一个名为init的静态/类属性返回一个闭包,我会理解它,但我认为没有。不幸的是,这本书并没有详细说明这行代码。我想进一步阅读苹果文档,但我找不到任何东西。当我在谷歌上搜索“in

swift - 为什么在使用 init(contentsOfFile :)?) 创建字符串时多了一个换行符

我试图读取包中文件的内容并将其放入字符串变量中。我使用了init(contentsOfFile:)初始化程序。但是,字符串末尾似乎总是有一个额外的\n字符。这是一个MCVE:letstring=try!String(contentsOfFile:Bundle.main.path(forResource:"test",ofType:"txt")!)print(string.debugDescription)test.txt是这样的:HelloWorldByeWorld请注意,我没有在末尾插入新行。这可以通过查看行数来证明:上面的代码产生了这样的输出:"Hello\nWorld\nBye\

ios - 调用 Realm().objects 时使用未实现的初始化程序 'init(realm:schema:)'

我正在尝试通过使用检索Realm的对象Realm(path:Realm.defaultPath).objects(Fruits)这是我得到的结果:12:7:fatalerror:useofunimplementedinitializer'init(realm:schema:)'forclassDB.Fruits该对象只有以下初始化:requiredinit(){super.init()nextPrimaryKey()}我已经查看了有关init()问题的所有信息,但是没有一个解决了问题(包括这个almost-exactquestion)。知道如何解决吗? 最佳

swift - lazy var 定义后的括号是做什么用的?

我正在分析一些第三方代码,有一个看起来像这样的“惰性”var语句,我想了解“计算属性”花括号后的括号在做什么:lazyvardefaults:NSUserDefaults={return.standardUserDefaults()}()“return.standardUserDefaults()”返回的是NSUserDefaults实例对象,为什么要在右花括号后面加一个()呢?谢谢 最佳答案 这意味着它是第一次访问defaults时执行的block。如果没有(),则意味着默认值是()->NSUserDefaults类型的block

swift - lazy var 和 let 的区别

下面的代码可以工作,但是当我将lazyvar更改为let时,它就不能工作了。不知道为什么lazyvarcollectionView:UICollectionView={letlayout=UICollectionViewLayout()letcv=UICollectionView(frame:.zero,collectionViewLayout:layout)cv.translatesAutoresizingMaskIntoConstraints=falsecv.backgroundColor=.redcv.dataSource=selfcv.delegate=selfreturncv

ios - 更新到 Xcode 6.1 后 "Use of property ' nibName ' in base object before super.init initializes it"

我的iOS应用程序中有这段代码,是用Swift编写的:classAddHomeViewController:UITableViewController,UITextFieldDelegate{...requiredoverrideinit(nibNamenibNameOrNil:String?,bundlenibBundleOrNil:NSBundle?){super.init(nibName:nibName,bundle:nibBundle)}更新到Xcode6.1后,我在super.init(nibName:nibName,bundle:nibBundle)行收到这些错误。它之前工

swift - 如何使用 init 变量在 swift 中创建单例

我正在尝试在swift中创建一个单例类,但出现错误“无法创建带有元素标签的单元素元组”我不明白。classGroupObject{//wewantthegroupobjecttobeasingletonvarname:Stringvarid:IntvargroupJsonObject:JSONinit(groupJsonObject:JSON){self.groupJsonObject=groupJsonObjectself.id=groupJsonObject["id"].int!self.name=groupJsonObject["name"].string!}classvarsh

swift - 从 Storyboard启动的初始应用程序无法调用 NSDocument init

我使用Xcode模板编写了一个带有Storyboard的macOS文档类型应用程序,并且沿线的某处初始应用程序启动和文档之间的关联与预期模式不同,因此没有NSDocument初始化程序我希望在应用程序首次启动时被调用(但此后每个新窗口都会被调用)。我已经将所有四个记录在案的NSDocument初始化程序子类化,如下所示:publicclassSimulation:NSDocument{overrideinit(){debugPrint("--------------------\(#file)->\(#function)called")super.init()}init(content

ios - 如何在 init 中捕获错误(来自解码器 :Decoder) from a Codable struct?

letjsonString="""{"name":1,"gender":"male",}"""structPerson:Codable{varname:Stringvargender:Stringpublicinit(fromdecoder:Decoder)throws{do{letcontainer=trydecoder.container(keyedBy:CodingKeys.self)name=trycontainer.decode(String.self,forKey:.name)gender=trycontainer.decode(String.self,forKey:.ge