草庐IT

Initialization

全部标签

swift 4 : Simplifying constructor that just sets fields from parameters?

以下Swift4类从传递给构造函数的7个参数中设置7个字段。鉴于此构造函数的唯一工作是将这些参数中的每一个赋值给字段,有没有更简单的代码编写方法?似乎存在大量没有实际好处的重复。publicclassFactoryForListOfKnownApp{privateletreaderForVersion:ReaderForVersionprivateletfinderForNameOfApp:FinderForNameOfAppprivateletlistOfAppName:[AppName]privateletfactoryForVersionFromVersion:FactoryFo

swift - 为什么 Swift 的类和结构是这样设置的?

在Swift中,类具有继承性,而结构则没有。同时,类实例存在于堆中,而结构实例存在于栈中。这意味着只允许四种可能性中的两种:您可以拥有支持继承且位于堆中的事物,或者您可以拥有不支持继承且位于堆栈中的事物。您不能拥有支持继承并且存在于堆栈中的事物,您也不能够拥有不支持继承并且存在于堆中的事物。这是为什么?是什么让后两种可能性不受欢迎?再来一次,为什么结构有一个免费的初始值设定项,而类却没有? 最佳答案 这是关于值类型与引用类型的合理设计。Class作为一个reference-type,它的继承对应于identity。而作为值类型的St

swift - 如何将 Struct 初始化中的属性设置移动到另一个方法中

所以我有一个结构,调用DemoType,我希望调用者用两个属性初始化它——但是我也想公开设置第二个属性的能力,问题是在设置prop2之前,有相当多的逻辑需要先运行。这意味着有很多重复的代码行,我正试图通过将这些逻辑保留在一个地方来减少这种情况。我想将其全部保存在setProp2中structDemoType{varprop1:Stringvarprop2:Stringinit?(p1:String,p2:String){self.prop1=p1letpotentialFailure=trueguardpotentialFailureelse{returnnil}//Like20lin

Swift:要么/要么初始化器

有什么方法可以声明一个Swift协议(protocol),其中实现类应该有一个接受字符串或字典的初始化程序?干杯尼克 最佳答案 你最好的尝试是这样的:enumTextOrDict{caseText(String)caseDict(Dictionary)}protocolMyProtocol{init(value:TextOrDict)} 关于Swift:要么/要么初始化器,我们在StackOverflow上找到一个类似的问题: https://stackove

ios - 在 Swift 中编写大型应用程序时,我什至需要使用 "init"方法吗?

这更像是一个概念问题。为什么要费心使用init?classPerson{varname:Stringvarheight:Double...init(name:String){self.name=nameself.height:Double...}为什么不给所有东西一个默认值呢?varname="Daniel"varheight=178.0这样一来,我也不必担心在指定初始化和“便利”初始化之间做出选择,因为一切都将从它们的父类(superclass)继承。使用此init方法是否有原因?它是否允许使用严格默认值初始化的应用程序无法实现的编码模式?还是出于资源/内存管理等原因?

swift - Swift 中的全局初始化与 viewDidLoad 初始化之间有区别吗

如果我有一个类并像这样初始化一个变量:classTestClass:UIViewController{varthisInt:Int=10}这与像这样初始化有什么不同吗:classTestClass:UIViewController{varthisInt:Int!overridefuncviewDidLoad(){super.viewDidLoad()thisInt=10}}我想我的主要问题在于何时进行全局初始化,以及是否存在某个时间调用一个比另一个调用更多的正常iOS编程(不做任何严重反对native开发的事情)。我知道在viewDidLoad中这样做会限制我使用weak或option

arrays - Swift:为什么创建空白数组时需要空括号?

为什么定义一个空白数组后需要括号“()”?例如:letemptyArray=[String]()但是当你使用一个带有预定义值的数组时,它就不需要它们了?letpopulatedArray=["Hello","question"] 最佳答案 您正在调用初始化程序,这类似于:letobject=MyObject()或letstring=String()也可以写成letarray=Array()当您使用预定义值时,类型是从数组项的类型中推断出来的。对于空数组,没有任何项,因此必须明确指定类型。另一种方法是:letarray:[String

ios - 在 Swift 中声明实例变量 : optional vs forced unwrapping vs initial value

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion这是关于在swift中声明带有实例变量的swift类的最佳实践的基本问题,所有值都将从Firebase回调中接收。这些选择中最好的方法是什么,或者让我知道是否有其他更好的方法:解决方案一:classUser:NSObject{varname:String=""overrideinit(){super.init()}}解决方案2:classUser:NSObject{varname:Stri

ios - 从字符串中获取静态变量

我有以下描述国家的类:classCountry:NSObject{publicvarname:Stringstaticletengland=Country(name:"England")staticletscotland=Country(name:"Scotland")staticletallCountries=[england,scotland]init(name:String){self.name=namesuper.init()}convenienceinit?(namedname:String){guardletcountry=Country.allCountries.filt

swift - 'let' 属性不能直接初始化;使用 "self.init(...)"或 "self = ..."代替

我想尝试在protocol扩展中编写一个默认的init,所以我这样做了:protocolP{vardata:[AnyHashable:Any]{get}init(_s:String)}extensionP{init(_s:String){self.data=["s":s]}}但是我收到了这个错误:'let'property'data'maynotbeinitializeddirectly;use"self.init(...)"or"self=..."instead我不知道这是什么意思。感谢您的帮助! 最佳答案 该错误表明该变量无法在