小编Gri*_*mxn的帖子

何时从Swift中的另一个函数返回一个函数

你想要从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(我认为).

ios swift

9
推荐指数
1
解决办法
2525
查看次数

Xcode 6.1 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!不可缓存.有线索吗?

xcode swift

8
推荐指数
1
解决办法
2441
查看次数

Swift 2 MKMapViewDelegate rendererForOverlay选项

在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不是 …

mkmapviewdelegate swift

7
推荐指数
1
解决办法
2673
查看次数

Swift中的NSMenu选择器

我不知道为什么这不起作用.菜单显示,但如果我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)

swift

6
推荐指数
1
解决办法
3400
查看次数

NSObject和Struct之间的区别

我想知道的区别NSObjectstruct..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..?

struct swift ios8

6
推荐指数
2
解决办法
2097
查看次数

在Swift中实现"Either"结构

有人可以解释下面的代码中发生了什么?它创建一个结构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)

swift

5
推荐指数
1
解决办法
911
查看次数

Swift中的NSCalendar - init可以返回nil,但不是可选的

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)

但是,这是一个编译时错误,如图所示.

我在这里误解了什么,如何安全地测试命名日历实际存在?

nscalendar swift

5
推荐指数
1
解决办法
2309
查看次数

如何制作枚举案例(swift)

我从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)

enums objective-c switch-statement swift ios8

5
推荐指数
1
解决办法
2万
查看次数

当我尝试使用 PHP + Swiftmailer 发送电子邮件时出现错误:“501 5.5.4 域名无效”

我正在编写一个非常简单的联系表格,允许蓝领工人通过我们的内联网提交安全问题通知。联系表单以 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)

php email swiftmailer

5
推荐指数
1
解决办法
2万
查看次数

NVActivityIndi​​catorView 仅用于特定视图

我正在使用这个库https://github.com/ninjaprox/NVActivityIndi​​catorView来显示加载指示器。默认情况下,它会阻止整个视图控制器,但如何仅显示特定视图的活动指示器。例如,如果视图控制器包含一个 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)

uiwebview uiactivityindicatorview ios swift swift3

5
推荐指数
1
解决办法
7071
查看次数