質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

1293閲覧

Swiftのtry!をenum TestError: Errorを記述することなく実装する場合に関して

keys

総合スコア215

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/09/07 04:33

通常であれば、Swiftに置けるエラーハンドリングはError型をどこかで定義して実装します。下記のように

swift

1 2import UIKit 3 4class ViewController: UIViewController { 5 6 enum TestError: Error { 7 case first 8 case second 9 case otherwise 10 } 11 12 func throwingError(_ sw: Int) throws -> Int { 13 if sw == 1 { 14 throw TestError.first 15 } else if sw == 2 { 16 throw TestError.second 17 } else if sw >= 3 { 18 throw TestError.otherwise 19 } 20 21 return 100 22 } 23 24 25 26 override func viewDidLoad() { 27 super.viewDidLoad() 28 29 do { 30 let num = try throwingError(2) 31 print(num) 32 } catch TestError.first { 33 print("first") 34 } catch TestError.second { 35 print("second") 36 } catch { 37 print("Error!") 38 } 39 } 40 41 override func didReceiveMemoryWarning() { 42 super.didReceiveMemoryWarning() 43 } 44} 45

ですが、とあるソースのコードの中で下記のような関数があるのですが、どこにもエラーハンドリングを実装してないのにtry! Dataから始まるtry!構文が記述されてあります。関数の結果を返している関数の引数にクロージャで始まるtry! Dataという記述です。try!を使う際、下記のような使用方法は、何を意味しているのでしょうか?: Errorから始まるエラーハンドリングのenmuは実装してなかったですしdo catch構文も一つも見つかりません。

swift

1 2func createMovieFrom(url: URL, duration:Int) -> URL{ 3 var urls = [URL]() 4 var index = duration 5 while(index > 0){ 6 urls.append(url) 7 index -= 1 8 } 9 10 return self.createMovieFromSource(images: urls as [AnyObject], extractor: 11 12 {(inputObject:AnyObject) ->UIImage? in return UIImage(data: try! Data(contentsOf: inputObject as! URL))} 13 ) 14 } 15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

try!はエラーが発生すると落ちます。

参考:Swift 3.0 エラー処理入門 - キーワードtry?とtry!

投稿2017/09/07 04:41

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2017/09/07 04:44

as! と同じで、ほとんど使うことはないのでは。
guest

0

assertと同じようなものです。
エラーが発生しないことを期待し、エラーが発生した場合は、エラーメッセージを出力して終了します。

swift

1let data = try? Data(contentsOf: inputObject as! URL) 2assert(data != nil)

投稿2017/09/09 03:13

Stripe

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keys

2017/09/24 02:25

エラーが発生しないことを期待するけど、エラーが発生するかもしれない所に、備えておくんですね。エラーが発生した時に「ここでアプリが落ちた」と分かりやすくするためですね。納得です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問