有人可以在OOP上下文中提供方法与函数的简单解释吗?
我听说Liskov替换原则(LSP)是面向对象设计的基本原则.它是什么以及它的使用例子是什么?
oop liskov-substitution-principle definition design-principles solid-principles
有人能解释一下吗 我理解它们背后的基本概念,但我经常看到它们互换使用,我感到困惑.
现在我们在这里,它们与常规功能有什么不同?
以下代码在Swift 1.2中编译:
class myClass {
static func myMethod1() {
}
class func myMethod2() {
}
static var myVar1 = ""
}
func doSomething() {
myClass.myMethod1()
myClass.myMethod2()
myClass.myVar1 = "abc"
}
Run Code Online (Sandbox Code Playgroud)
静态函数和类函数有什么区别?我应该使用哪一个,何时使用?
如果我尝试定义另一个变量class var myVar2 = "",它会说:
类中尚未支持的类存储属性; 你的意思是'静态'吗?
当支持这个特性时,静态变量和类变量之间的区别是什么(即两者都是在类中定义的)?我应该使用哪一个,何时使用?
(Xcode 6.3)
a只能在这里决赛.为什么?如何a在onClick()不将其保留为私有成员的情况下重新分配方法?
private void f(Button b, final int a){
b.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
int b = a*5;
}
});
}
Run Code Online (Sandbox Code Playgroud)如何5 * a点击它返回?我的意思是,
private void f(Button b, final int a){
b.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
int b = a*5;
return b; // but return type is void
}
});
}
Run Code Online (Sandbox Code Playgroud)来自Apple的书"结构和类之间最重要的区别之一是结构在代码中传递时总是被复制,但类是通过引用传递的."
任何人都可以让我理解这意味着什么,对我来说,类和结构似乎是一样的.
我注意到assert在Swift中编写第一个值时输入为
@autoclosure() -> Bool
Run Code Online (Sandbox Code Playgroud)
用重载方法返回一个通用T值,通过它来测试存在LogicValue protocol.
但严格坚持手头的问题.它似乎想要一个@autoclosure返回一个Bool.
编写一个不带参数并返回Bool的实际闭包不起作用,它要我调用闭包使其编译,如下所示:
assert({() -> Bool in return false}(), "No user has been set", file: __FILE__, line: __LINE__)
Run Code Online (Sandbox Code Playgroud)
然而,简单地通过Bool工作:
assert(false, "No user has been set", file: __FILE__, line: __LINE__)
Run Code Online (Sandbox Code Playgroud)
那么发生了什么?什么是@autoclosure?
编辑: @auto_closure已重命名@autoclosure
在Objective C中很简单:更新main.m文件并更改UIApplicationMain()参数就足够了
return UIApplicationMain(argc, argv, NSStringFromClass([CustomUIApplication class]), NSStringFromClass([AppDelegate class]));
Run Code Online (Sandbox Code Playgroud)
但是在swift中没有main.m文件,因为指南说
"在全局范围编写的代码用作程序的入口点,因此您不需要主函数."
那么,如何在swift中继承UIApplication?有什么建议吗?
func say(name:String, msg:String) {
println("\(name) say \(msg)")
}
say("Henry","Hi,Swift") <---- error because missing argument label 'msg' in call
Run Code Online (Sandbox Code Playgroud)
我需要用
say("Henry",msg:"Hi,Swift")
Run Code Online (Sandbox Code Playgroud)
为什么?如果我在func中放入两个以上的var,这样当我调用这个函数时我需要编写var name而不是first var
它真的很麻烦,我在iBook Swift教程中没有看到任何解释.
我是Swift的新手,当我遇到逃脱闭合时,我正在阅读手册.我根本没有得到手册的描述.有人可以用简单的语言向我解释一下Swift中有什么逃避封锁.
年复一年,我试图了解部分与内存模型和并发交易的Java规范.我不得不承认我惨遭失败.是的'我理解锁和"synchronized"以及wait()和notify().我可以使用它们,谢谢.我甚至对"易变"的含义有一个模糊的想法.但所有这些都不是来自语言规范 - 而是来自一般经验.
以下是我要问的两个示例问题.我对特定答案并不是那么感兴趣,因为我需要理解答案是如何从规范中得出的(或者可能是我如何得出规范没有答案).
这里有类似的问题,但它们附加到特定的编程语言,我正在寻找概念层面的答案.
据我所知,Functors本质上是不可变的容器,它暴露了map() API,派生出另一个仿函数.哪个添加可以将特定的仿函数称为monad?
据我所知,每个monad都是一个仿函数,但不是每个仿函数都是monad.
从几个初始教程中,我看到属性属于一个类,并且基本上是C++世界中使用的"全局变量"(在此前编码).我还将变量看作更多只在方法中使用/存储信息的"本地"实体.
然后我遇到了这个Quora线程:https://www.quora.com/Apple-Swift-programming-language/What-is-the-difference-between-a-property-and-a-variable 现在我看到属性正在能够执行与其调用相关的代码.这很酷,但也为我打开了一大堆其他问题.
还有其他简单明了的方法来记住属性和变量之间的区别吗?
swift ×7
closures ×3
function ×3
ios ×3
java ×2
oop ×2
class ×1
cocoa-touch ×1
concurrency ×1
definition ×1
functor ×1
lambda ×1
liskov-substitution-principle ×1
methods ×1
monads ×1
static ×1
terminology ×1
variables ×1