你想要从Swift中的函数返回函数的最常见情况是什么?
在下面的代码中我返回一个函数,但我没有真正看到目的,因为我返回的函数是在返回它的函数内部.我感到困惑的原因是因为我们只用一个函数就能完成同样的事情.
func person () -> ((String, Int) -> String) {
func info(name: String, age: Int) -> (String) {
return "\(name) is \(age) old"
}
return info
}
let nathan = person()
nathan("Nathan", 3)
print(nathan("Nathan", 3))
Run Code Online (Sandbox Code Playgroud)
有人可以指出你想要返回一个函数的常见情况,并可能用一个更好的例子说明它吗?
我想理解这一点,因为这对于编程而言通常不仅仅是Swift(我认为).
从Xcode 6 Beta 7升级到Xcode 6.1 Beta 2后,以下内容不再有效:
let font = UIFont(name: "Arial", size: 16)
let colour = UIColor.redColor()
let attributes = [NSFontAttributeName: font, NSForegroundColorAttributeName: colour]
Run Code Online (Sandbox Code Playgroud)
我试过特别声明字典为
let attributes: [NSString : AnyObject] = [NSFontAttributeName: font, NSForegroundColorAttributeName: colour]
Run Code Online (Sandbox Code Playgroud)
但我收到错误"无法转换...'字典'到'NSString!'".声明密钥NSString!而不是NSString抱怨NSString!不可缓存.有线索吗?
在Swift 1.2中我有这个:
class UVC: NSViewController, MKMapViewDelegate {
// ...
// **************************************
// MARK: MapView Delegate
// **************************************
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer! {
if overlay is OSGBTiles {
return OSGBTilesRenderer(tileOverlay: overlay as! OSGBTiles)
} else if overlay is ESRI {
return ESRIRenderer(shapeFileOverlay: overlay as! ESRI)
} else if overlay is MKTileOverlay {
return MKTileOverlayRenderer(overlay: overlay)
} else {
print("Unknown overlay")
}
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 2已经将定义更改 mapView:rendererForOverlay为现在返回MKOverlayRenderer而不是MKOverlayRenderer!,并且现在不允许我返回nil(不出所料),因为MKOverlayRenderer不是 …
我不知道为什么这不起作用.菜单显示,但如果我autoenablesItems以默认值离开,则显示为灰色,如果我设置了操作,则不会调用操作false.
class GameScene: SKScene {
// ...
func action1(sender: AnyObject) {
println("Urk, action 1")
}
func action2(sender: AnyObject) {
println("Urk, action 2")
}
func popUpMenu(#event: NSEvent) {
var theMenu = NSMenu(title: "Contextual menu")
theMenu.addItemWithTitle("Action 1", action: Selector("action1:"), keyEquivalent: "")
theMenu.addItemWithTitle("Action 2", action: Selector("action2:"), keyEquivalent: "")
//theMenu.autoenablesItems = false
NSMenu.popUpContextMenu(theMenu, withEvent:event, forView:self.view)
}
override func mouseDown(theEvent: NSEvent) {
self.popUpMenu(event: theEvent) // The menu shows
}
}
Run Code Online (Sandbox Code Playgroud)
更新
根据@ Chuck的回答,您需要执行以下操作:
func popUpMenu(#event: NSEvent) {
var theMenu = NSMenu(title: …Run Code Online (Sandbox Code Playgroud) 我想知道的区别NSObject和struct..Following例如将解释这两种情况下
在 struct
struct UserDetails{
var userName:String
var userID:String
var userAge:String
func userDescription()->String{
return "name " + userName + "age " + userAge
}
}
Run Code Online (Sandbox Code Playgroud)
在NSObject课堂上
class UserDetails: NSObject {
var userName:String?
var userID:String?
var userAge:String?
func userDescription()->String{
return "name " + userName! + "age " + userAge!
}
}
Run Code Online (Sandbox Code Playgroud)
你能告诉我在哪里必须NSObject上课,我必须在哪里使用struct..?
有人可以解释下面的代码中发生了什么?它创建一个结构Either,它接受任意两个可选类型,并且(尝试)返回任何一个不是nil,或者如果两个都不是nil则返回第一个.然而,当传递文字nil而不是nil变量时,它表现得很奇怪.我不明白为什么b4在这个例子中表现得像......
struct Either <T1, T2> {
let first: T1?
let second: T2?
init(first: T1?, second: T2?) {
self.first = first
self.second = second
}
func either() -> Bool {
return (self.first != nil) || (self.second != nil)
}
func which() -> Any? {
if self.first != nil {
return self.first
} else if self.second != nil {
return self.second
}
return nil
}
}
var s1: String? = nil
var s2: Int? = nil
let b1 …Run Code Online (Sandbox Code Playgroud) NSCalendar(calendarIdentifier: calendarName)nil如果calendarName无效则可以返回- 这是原始的Objective-C行为,在Swift中也是如此.但是,似乎编译器认为初始化程序返回的是NSCalendar而不是a NSCalendar?,如下所示:
let c1 = NSCalendar(calendarIdentifier: "gregorian")// _NSCopyOnWriteCalendarWrapper
let c2 = NSCalendar(calendarIdentifier: "buddhist")// _NSCopyOnWriteCalendarWrapper
//let c3:NSCalendar = NSCalendar(calendarIdentifier: "rubbish") // run-time error
let c3:NSCalendar? = NSCalendar(calendarIdentifier: "rubbish") // nil
Run Code Online (Sandbox Code Playgroud)
因此,如果初始化程序可以返回nil,我的理解是我应该能够做到
if let c4 = NSCalendar(calendarIdentifier: "rubbish") as? NSCalendar {
//error: conditional downcast from 'NSCalendar' to 'NSCalendar' always succeeds
}
Run Code Online (Sandbox Code Playgroud)
但是,这是一个编译时错误,如图所示.
我在这里误解了什么,如何安全地测试命名日历实际存在?
我从ObjC那里得到了这个代码.我想将它转换为Swift,但是,我很难这样做......
ObjC代码:
navgivet.h
typedef NS_ENUM(NSInteger, BB3Photo) {
kirkenType = 10 ,
festenType = 20 ,
praestType = 30
};
@property (nonatomic, assign) BB3Photo selectedPhotoType;
Run Code Online (Sandbox Code Playgroud)
navgivet.m
- (IBAction)changeImage:(id)sender {
if ([sender isKindOfClass:[UIButton class]]) {
UIButton *button = sender;
_selectedPhotoType = button.tag;
}
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Vælg Billed"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:@"Vælg fra Biblioteket", @"Vælg Kamera", nil];
sheet.actionSheetStyle = UIActionSheetStyleDefault;
[sheet showInView:[self.view window]];
Run Code Online (Sandbox Code Playgroud)
}
switch (_selectedPhotoType) {
case kirkenType: {
}break;
case festenType: {
}break;
case praestType: {
}break;
default: …Run Code Online (Sandbox Code Playgroud) 我正在编写一个非常简单的联系表格,允许蓝领工人通过我们的内联网提交安全问题通知。联系表单以 HTML 格式显示,并要求输入姓名、发件人电子邮件以及要发送的消息。它总是发送到我们的安全电子邮件。
服务器和端口正确。它是一个 Exchange 2010 服务器,我们使用 TSL。服务器配置为能够“匿名”接收电子邮件。我可以通过 telnet 命令进行连接,但当我尝试通过评论框发送邮件时,收到“501 5.5.4 域名无效”错误。
define("EMAIL_SUBJECT", "Safety Concerns");
define("EMAIL_TO", "email");
// SMTP Configuration
define("SMTP_SERVER", 'server');
define("SMTP_PORT", 25);
// define("UPLOAD_DIR", '/var/www/tmp/'); // Default php upload dir
// main method. It's the first method called
function main($contactForm) {
// Checks if something was sent to the contact form, if not, do nothing
if (!$contactForm->isDataSent()) {
return;
}
// validates the contact form and initialize the errors
$contactForm->validate();
$errors = array();
// If the contact form …Run Code Online (Sandbox Code Playgroud) 我正在使用这个库https://github.com/ninjaprox/NVActivityIndicatorView来显示加载指示器。默认情况下,它会阻止整个视图控制器,但如何仅显示特定视图的活动指示器。例如,如果视图控制器包含一个 webview 和一些其他视图,则活动指示器应该仅用于 webview,我应该能够与其他视图交互。
class FaqViewController: UIViewController, UIWebViewDelegate
{
@IBOutlet var faqWebView: UIWebView!
static let activityData = ActivityData()
var activityIndicator : NVActivityIndicatorView!
override func viewDidLoad()
{
super.viewDidLoad()
faqWebView.delegate = self
faqWebView.loadRequest(URLRequest(url: URL(string: "https://www.google.com")!))
}
func webViewDidStartLoad(_ webView: UIWebView)
{
NVActivityIndicatorView.DEFAULT_BLOCKER_SIZE = CGSize(width: 45, height: 45)
NVActivityIndicatorPresenter.sharedInstance.startAnimating(FaqViewController.activityData)
}
func webViewDidFinishLoad(_ webView: UIWebView)
{
NVActivityIndicatorPresenter.sharedInstance.stopAnimating()
}
}
Run Code Online (Sandbox Code Playgroud) swift ×9
ios ×2
ios8 ×2
email ×1
enums ×1
nscalendar ×1
objective-c ×1
php ×1
struct ×1
swift3 ×1
swiftmailer ×1
uiwebview ×1
xcode ×1