2016-08-18 53 views
-2

所以我想不通的是一个1个衬垫在斯威夫特以下语法,它是推动我坚果:斯威夫特自选零检查

if lastProfile == nil || lastProfile.id == profile.id { 
     useProfile(profile) 
     lastProfile = profile 
} 

现在看看我能连锁,但我还是最终与2- 3 ifs。我可以把它打包出来,但是我最终还是会得到2-3个ifs ......这可能只需要一下就完成了吗?

编辑:

我的同事发现了一种替代(虽然我们同意丑):

if !(latestProfile != nil && latestProfile!.voiceId != profile.voiceId) { 

} 

难道还有比上述更好的办法?

+0

您的最后一个配置文件已经可以为空,为什么不只是latestProfile?voiceId = profile.voiceId? – Brduca

+0

@Brduca如果它是nul或者如果在语音ID中有匹配,我想要输入block。 – Warpzit

+3

我必须是密集的。你的第一个例子有什么问题,第二个例子怎么样? – vacawama

回答

1

解决方案仅仅是一个?远:

if lastProfile == nil || lastProfile?.id == profile.id { 
    print("true") 
    lastProfile = profile 
} 

这将打印 “真” 时lastProfile为零或当lastProfile和配置文件有相同的ID。否则它不打印任何东西

+0

G该死的。因为我几个月前得到的一个错误,我已经进入了我的头,因此我无法使用==零,所以我甚至没有看到更远的线...... – Warpzit

0

如果lastProfile被声明为let lastProfile: Profile? = ...,例如ID被声明为可选的,你也可以使用它作为:

if let lastProfileId = lastProfile?.id { 
    // lastProfile is not nil and id is not nil 
} 
else { 
    // lastProfile is nil or lastProfile.id is nil 
} 

这就是所谓的可选链接,你可以迅速docs读到它。

+0

看看语法,它不会在1个块中完成... – Warpzit

-1
if let recentProfile = latestProfile where recentProfile.voieId != profile.voiceId { 
    useProfile(profile) 
    lastProfile = profile 
} 
+0

如果它是零,我会输入块吗?如果没有...那么没有更好。 – Warpzit

+0

对不起,我误解了你的问题,上面的答案好jboi –

+0

这就好。感谢您试图帮助这个愚蠢的:)(我没有投票btw。) – Warpzit