在这里,我们将给大家分享关于在Swift3中区分文件私有和私有的好例子的知识,同时也会涉及到如何更有效地CommonCrypto如何在SWIFT3中使用?、ios–为什么在Swift中使用私有属性/方
在这里,我们将给大家分享关于在Swift3中区分文件私有和私有的好例子的知识,同时也会涉及到如何更有效地CommonCrypto如何在SWIFT3中使用?、ios – 为什么在Swift中使用私有属性/方法并不常见、ios – 在Swift 2.3中使用swift 3框架、ios – 在swift3中结合翻译,alpha和缩放动画的内容。
本文目录一览:- 在Swift3中区分文件私有和私有的好例子
- CommonCrypto如何在SWIFT3中使用?
- ios – 为什么在Swift中使用私有属性/方法并不常见
- ios – 在Swift 2.3中使用swift 3框架
- ios – 在swift3中结合翻译,alpha和缩放动画
在Swift3中区分文件私有和私有的好例子
该文章已在了解新的访问说明很有帮助Swift3
。它也给出了不同用途的一些例子fileprivate
和private
。
我的问题是-是不是fileprivate
仅在此文件中使用的函数上使用的功能与using相同private
?
答案1
小编典典fileprivate
现在是private
Swift早期发行版中的版本:可从同一源文件访问。private
现在,只能在声明的词法范围内访问标记为的声明。因此private
比更具限制性fileprivate
。
从 Swift 4开始, 如果扩展名是在同一源文件中定义的,则同一类型的扩展名可以访问类型内的私有声明。
示例(全部在一个源文件中):
class A { private func foo() {} fileprivate func bar() {} func baz() { foo() bar() }}extension A { func test() { foo() // Swift 3: error: use of unresolved identifier ''foo'' // Swift 4: no error because extension is in same source file bar() }}let a = A()a.foo() // error: ''foo'' is inaccessible due to ''private'' protection levela.bar()
foo
仅在class A { ... }
定义范围内才能访问private 方法。从扩展名到类型都无法访问它(在Swift 3中,有关Swift 4中的更改,请参见下面的第二个注释)。bar
可以从同一源文件访问file-private 方法。
笔记:
建议SE-0159 –修复专用访问级别建议在Swift 4中恢复到Swift 2语义。在对swift-evolution邮件列表进行了冗长而有争议的讨论之后,该建议被拒绝。
提案SE-0169 –改善私有声明和扩展之间的相互作用建议,
private
如果扩展在 同一源文件中 定义,则使该类型内的声明可用于同一类型的扩展 。 该建议已在Swift 4中接受并实施。
CommonCrypto如何在SWIFT3中使用?
但是,当我使用Andi和Graham给出的答案时,Xcode仍抱怨“使用未解析的标识符CC_SHA256_DIGEST_LENGTH ……”
我想我犯了两个错误之一:或者是
(a)我遗漏了没有连接标题并正确导入的内容.即我没有正确设置桥接头.我想知道如何包含库并正确创建桥接头的明确步骤.要么
(b)默认情况下不包含库,我实际上需要先下载它并在本地存储才能使用它.我喜欢这方面的指示.
谢谢.
解决方法
1)——————————————-
转到xcode文件检查器并选择您的项目文件并添加新目标.
2)——————————————-
从跨平台部分选择聚合.
3)——————————————-
在您恰当地命名后,从目标中选择它并转到构建阶段部分.
4)——————————————-
选择加号按钮并使用以下代码创建新的运行脚本阶段.它将在构建之前为每个平台生成适当的模块,您甚至可以为模拟器导入CommonCrypto.
mkdir -p "${SRCROOT}/Frameworks/CommonCrypto" cat <<EOF > "${SRCROOT}/Frameworks/CommonCrypto/module.modulemap" module CommonCrypto [system] { header "${SDKROOT}/usr/include/CommonCrypto/CommonCrypto.h" export * } EOF
5)——————————————-
在此步骤之后转到项目目标并实际将此聚合链接到您的构建过程
6)——————————————-
选择聚合
7)——————————————-
现在仍然在项目目标中去构建设置并找到“标题搜索路径”并插入此路径以便为新生成的模块遍历
${} SRCROOT /框架/ CommonCrypto
8)——————————————-
现在你需要做的只是
导入CommonCrypto
某处并开始使用它.
希望能帮助到你
ios – 为什么在Swift中使用私有属性/方法并不常见
我有点困惑,尽管事实上我一般没有很多编程经验,但我的理解是,在一个程序中,你将一切都设为私有,只公开你想要暴露给其他人的属性和方法.类.
来自Apple Docs
In addition to offering varIoUs levels of access control,Swift
reduces the need to specify explicit access control levels by
providing default access levels for typical scenarios. Indeed,if you
are writing a single-target app,you may not need to specify explicit
access control levels at all.
通过将每个属性/方法保留为默认值(内部),您基本上可以访问其他类的值,对吗?
为什么在Swift / Cocoa中你很少看到私有访问器用于你不希望程序的其他部分访问的属性?
有人可以如此善良并解释一般的概念访问器吗?为什么Swift以这种方式设计,或者甚至更好地纠正我,如果我在上面的假设我错了,再次我没有太多的OOP经验我可能会对访问者的概念感到困惑.
谢谢
更新:今天(2016年7月1日)我观看了视频#3从斯坦福大学在iTunes中提供的Swift开发iOS 8应用程序的应用程序中的MVC和24分钟时分24:15 Paul Hegarty谈到访问控制,我强烈推荐它.
解决方法
Swift的访问控制不是基于类,而是基于源文件和模块.我们的想法是,如果您编写一个类,那么默认情况下您应该可以访问同一源文件或模块中其他类的所有成员.如果其他人扩展了您的类,他们的代码将位于不同的模块和源文件中,因此除非您授予他们访问权限,否则他们将无法访问您的基类成员.
如果你考虑一下,Swift的访问控制范式与C / Java一样有意义,它只是不同.
有关此语言和其他语言之间的差异,请参阅http://www.swiftprogrammer.info/swift_vs_cpp.html.
ios – 在Swift 2.3中使用swift 3框架
解决方法
Swift 3 is the primary development language supported within Xcode 8
so there are a couple notes to consider if you chose to continue using
Swift 2.3. First,Swift 2.3 and Swift 3 are not binary compatible so
your app’s entire code base needs to pick one version of Swift.
Source and more informations on the Apple Swift Blog.
您必须在2.3和3.0之间进行选择.如果可以,我认为最好的想法是直接转向3.0(因为2.3只是一个“暂时”版本).
ios – 在swift3中结合翻译,alpha和缩放动画
我认为解决方案在这里是-Apple Dev Core Animation Programming Guide,通过对动画进行分组,但作为一个初学者,经过大量的互联网研究,我找不到我想要的东西.
您如何看待我的代码以及什么是适合您的性能和稳定性的最佳解决方案.
我想指出这个动画的目的是创建一个动画的Splashscreen.还有其他元素(UIImage)将用于动画.
这是我的代码:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) logoImg.alpha = 0 logoImg.transform = CGAffineTransform(translationX: 0,y: -200) logoImg.transform = CGAffineTransform(scaleX: 0,y: 0) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) UIView.animate(withDuration: 1.0,delay: 1.0,usingSpringWithdamping: 0.6,initialSpringVeLocity: 10,options: [.curveEaSEOut],animations: { self.logoImg.transform = CGAffineTransform(translationX: 0,y: 0) self.logoImg.transform = CGAffineTransform(scaleX: 1,y: 1) self.logoImg.alpha = 1 },completion: nil) }
解决方法
self.logoImg.transform = CGAffineTransform(translationX: 0,y: -200).concatenating(CGAffineTransform(scaleX: 0,y: 0)) self.logoImg.alpha = 0 UIView.animate(withDuration: 1.0,animations: { self.logoImg.transform = .identity self.logoImg.alpha = 1 },completion: nil)
我想你可能没有看到所有动画,所以尝试以0.5开始比例
self.logoImg.transform = CGAffineTransform(translationX: 0,y: -200).concatenating(CGAffineTransform(scaleX: 0.5,y: 0.5)) self.logoImg.alpha = 0 UIView.animate(withDuration: 1.0,initialSpringVeLocity: 1,completion: nil)
这里的关键是动画动画回原始身份.希望这可以帮助
今天关于在Swift3中区分文件私有和私有的好例子的分享就到这里,希望大家有所收获,若想了解更多关于CommonCrypto如何在SWIFT3中使用?、ios – 为什么在Swift中使用私有属性/方法并不常见、ios – 在Swift 2.3中使用swift 3框架、ios – 在swift3中结合翻译,alpha和缩放动画等相关知识,可以在本站进行查询。
本文标签: